首页  >  文章  >  后端开发  >  如何实现跨域JavaScript的JSONP回调?

如何实现跨域JavaScript的JSONP回调?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-22 15:41:02404浏览

How to Implement JSONP Callback for Cross-Domain JavaScript?

跨域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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn