跨域JavaScript的JSONP回调实现
为了方便不同域之间的通信,引入了JSONP(JSON with Padding)。此技术涉及创建一个回调函数,该函数可用于包装 JSON 数据并使其可以从不同的域进行访问。下面是如何在 PHP 中实现 JSONP:
接受回调参数
首先,在 GET 请求中,我们接受一个名为“callback”的参数:
<code class="php">if(array_key_exists('callback', $_GET)){ ... }</code>
包装回调函数
接下来,我们将回调 JavaScript 函数包装在我们的数据周围。例如:
<code class="php">$callback = $_GET['callback']; echo $callback.'('.$data.');';</code>
PHP 示例
这是一个 PHP 示例:
<code class="php"><?php $data = '{}'; // json string if(array_key_exists('callback', $_GET)){ header('Content-Type: text/javascript; charset=utf8'); header('Access-Control-Allow-Origin: http://www.example.com/'); header('Access-Control-Max-Age: 3628800'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); $callback = $_GET['callback']; echo $callback.'('.$data.');'; }else{ // normal JSON string header('Content-Type: application/json; charset=utf8'); echo $data; } ?></code>
JavaScript 用法
要使用 JSONP 服务,您可以使用 script 标签:
<code class="html"><script> function receiver(data){ console.log(data); } </script> <script src="data-service.php?callback=receiver"></script></code>
概念解释
JSONP 背后的核心思想是返回一个调用回调函数并提供 JSON 对象作为第一个参数的 JavaScript 文件。 PHP 中的 json_encode() 函数可用于将数组和对象转换为 JSON 字符串。
利用 JSONP 可以在不同域的脚本之间建立通信,有效绕过同源策略限制,实现数据的传输跨域交换。
以上是如何实现跨域JavaScript的JSONP回调?的详细内容。更多信息请关注PHP中文网其他相关文章!