我有两个域,example1.com 和 example2.com
从 example1.com,我想调用我在 example2.com 上的 JSON API。知道这是不允许的,我突然想到 - 这正是 JSONP 被创建的原因。
问题是,如何修改我的 JSON API 以使其支持 JSONP?
基本上,我如何创建回调 api?
更新
我的服务器端语言是 PHP
最佳答案
这很简单。只需接受一个名为 callback
的参数在 GET 中。
然后将回调 JavaScript 函数包裹在您的数据周围。
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;
}
它的想法是简单地返回一个JavaScript文件,该文件以JSON对象作为JavaScript回调函数的第一个参数调用回调函数。
您可以使用内置的json_encode()
函数从 PHP 中的数组和对象创建 JSON 字符串(在我们上面的示例中包含 $data
)。
要使用 JSONP 服务,您可以使用 <script>
标签:
<script>
function receiver(data){
console.log(data);
}
</script>
<script src="data-service.php?callback=receiver"></script>
关于php - JavaScript:如何创建 JSONP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678214/