在某些情况下使用跨域调用,我在jQuery.ajax的url参数中使用了回调参数。而且,我知道它使用在该参数中传递的名称来执行函数。
但是,我无法理解它究竟是如何运作的。我必须多次使用“callback =?”它执行了我在$ .ajax的成功函数中写的任何内容。并且,如果我传递 callback = getUsers ,它不执行命名函数说“getUsers”。这只是我观察工作和实施的一种方式,但无法得到究竟造成差异的原因。
任何人都可以解释一下。
答案 0 :(得分:1)
你在谈论jsonp,看一下wiki条目。它基本上是javascript利用全局命名空间强制进行数据传输,否则由于浏览器安全性而无法实现。
答案 1 :(得分:1)
JSONP实际上不是ajax,它只是整齐地包含在$.ajax
中,但它真正做的是在文档中插入一个<script>
标记,以及添加到文档末尾的回调。 querystring是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不能。