如何设置JSONP?

Jac*_*lom 12 javascript json jsonp firefox-addon

我需要在服务器端允许某人使用JSONP从该服务器获取数据.我还需要在用户方面做些什么呢?我想使用JSONP作为XMLHttpRequest的替代.

由于同源策略,它不会在我的Firefox扩展中运行.所以,人们推荐JSON,但在互联网上搜索教程和指南之后,我很遗憾.

谢谢您的帮助!

mar*_*rko 12

假设您的服务器正在运行PHP,您只需要添加"回调"GET请求.

<?php header('content-type: application/json; charset=utf-8');
$data = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 
echo $_GET['callback'] . '('.json_encode($data).')';
Run Code Online (Sandbox Code Playgroud)

在客户端(使用jQuery):

$.ajax({url: 'http://site.com/data.php', dataType:'jsonp'});
Run Code Online (Sandbox Code Playgroud)

上面的PHP代码仅用于演示,不要忘记清理 $ _GET ['callback']

也就是说,如果您的问题只是相同的原始策略,您可能只需要允许来自服务器端的跨源,并且一切都应该有效.


T.J*_*der 7

在服务器端,您需要设置的只是一个Web资源(例如,页面),它接受GET请求并使用JSON-P约定返回数据,即:

callback({"data": "here"});
Run Code Online (Sandbox Code Playgroud)

...其中函数名称(在该示例中为"回调")通常取自查询字符串参数之一(按照惯例,参数"回调"),数据是JSON文本(虽然从技术上讲它可能是任何东西)在JavaScript对象中有效,JSON-P的约定是限制自己在JSON中的有效性.例如,假设请求看起来像这样:

http://example.com/foo.php?callback=bar

它调用页面foo.php(不必是PHP,可以是任何动态服务器端系统),告诉它我们希望它调用的函数是"bar".我们的回应是:

bar({"data": "here"});
Run Code Online (Sandbox Code Playgroud)

在客户端,您必须script动态地向页面添加元素,并添加将由JSON-P响应触发的回调函数.通常,您希望为该函数提供一些随机名称,并在完成后将其删除.

这是一个完整的例子,作为Stack Overflow上另一个问题的答案.您可能需要稍微调整它以用于Firefox附加组件,但概念是相同的.