在.getJSON()中使用jsoncallback参数有什么用?

时间:2013-01-14 04:33:29

标签: php jquery ajax json getjson

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

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

在后端,响应写得像

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

我删除了“?jsoncallback =?”来自url和$ _GET [“jsoncallback”]和后端的方括号,似乎一切仍然有效。那么jsoncallback的用途究竟是什么用呢?

3 个答案:

答案 0 :(得分:2)

回调名称用于JSONP,这是规避same origin policy的方法。

答案 1 :(得分: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时要小心。

答案 2 :(得分:1)

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

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