3

在许多示例代码中,我看到 .getJSON() 的格式类似于

$.getJSON("url?jsoncallback=?", function(data){
...}

在后端,响应写成

$response = $_GET["jsoncallback"]."(".json_encode($orders).")";
echo $reponse

我删除“?jsoncallback =?” 从 url 和 $_GET["jsoncallback"] 以及后端的方括号,似乎一切仍然有效。那么那个 jsoncallback 的东西到底有什么用呢?

4

3 回答 3

2

回调名称用于JSONP,这是一种规避同源策略的方法。

于 2013-01-14T04:35:08.733 回答
2

如果你没有它,jsoncallback=?它只会做普通的 JSON 请求而不是 JSONP *您可以在自己的服务器或发送CORS标头的服务器上执行正常的 JSON 请求。


*忘记 JSONP,这是一个花哨的名称,用于在您的文档中插入一个脚本元素,该元素运行来自外部服务器的代码,但与您自己的脚本具有相同的授权。,$_GET["jsoncallback"]使它成为一个像这样的javascript函数调用:

fn({"data": "value"});

这是脚本中的代码,例如<script src="http://foreign.org/data?jsoncallback=fn"></script>. 如您所见,这是 Javascript,而不是 JSON。有了这个,foreign.org(或黑客攻击他们的人)可以更改他们的脚本以在您的页面上执行任何授权操作,因此在使用“JSONP”时要小心并更喜欢 CORS JSON。

于 2013-01-14T05:07:27.487 回答
1

JSON 回调可用于通过 jQuery 显示跨域数据。JSONP 用于进行跨域调用,因为同源策略不允许。看看下面的例子。

http://www.9lessons.info/2009/12/display-cross-domain-data-json-callback.html

于 2013-01-14T04:41:48.573 回答