0

跨域调用有一些情况,我在 jQuery.ajax 的 url 参数中使用了回调参数。而且,我知道它使用在该参数中传递的名称执行函数。

但是,我无法理解它究竟是如何工作的。我必须多次使用“callback=?” 它执行了我在 $.ajax 的成功函数中写的任何内容。而且,如果我通过callback=getUsers,它不会执行命名函数说“getUsers” 。这只是我观察工作并实施的一种方式,但无法了解究竟是什么导致了这里的差异。

谁能解释一下。

4

2 回答 2

1

您在谈论jsonp,请查看 wiki 条目。它基本上是 javascript 利用全局命名空间来强制进行数据传输,否则由于浏览器安全性而无法进行。

于 2013-07-17T08:48:02.760 回答
1

JSONP 不是真正的 ajax,它只是整齐地包装在 .json 中$.ajax,但它真正的作用是<script>在文档中插入一个标签,您添加到查询字符串末尾的回调是 JSON 包装在该脚本中的函数.
换句话说,请求:

'http://www.somepage.com/link/to/getjsonp?callback=fn'

服务器将生成如下所示的代码:

fn( {"name":"Ashmah", "type":"user"} );

这意味着插入的脚本调用一个名为 fn() 的函数,并传递一个 JSON 字符串作为参数,因此如果您的页面上有这样的函数,如下所示:

function fn(json) {
    // do something with json
}

将脚本添加到文档并加载后,将fn()调用该函数,以便您可以在脚本加载后访问 JSON 字符串,这就是它避免同源策略的方式,因为脚本标签可以是跨域的,但 XMLHttpRequests 可以不。

于 2013-07-17T08:57:57.587 回答