什么是URL中的回调

时间:2013-07-17 08:42:58

标签: javascript callback cross-domain

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

但是,我无法理解它究竟是如何运作的。我必须多次使用“callback =?”它执行了我在$ .ajax的成功函数中写的任何内容。并且,如果我传递 callback = getUsers ,它不执行命名函数说“getUsers”。这只是我观察工作和实施的一种方式,但无法得到究竟造成差异的原因。

任何人都可以解释一下。

2 个答案:

答案 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不能。