$.ajax(
{
url : "http://search.twitter.com/search.json?q=google&lang=en&rpp=10&since_id=&callback=?",
dataType : 'json',
success : function(data)
{
alert(data.results.length);
}
});
这究竟是如何工作的?我指的是跨域请求。
答案 0 :(得分:6)
jQuery检测到您网址的callback=?
部分,并自动将dataType从'json'
切换为'jsonp'
。
JSONP是一个JSON查询,它不是使用XMLHttpRequest创建的,而是通过向页面添加脚本标记。调用程序处理回调到您的脚本,并在脚本加载时提供要执行的JavaScript函数的名称。这就是跨域工作的原因。
jQuery将在$ .ajax请求中透明地处理JSONP。手册(以及我更干净)的方法是定义'jsonp'
dataType并使用占位符?
作为URL中的回调名称。 jQuery会自动用适当的值替换?
以触发成功回调。
$.ajax(
{
url : "http://api.twitter.com/1/users/show/google.json&jsoncallback=?",
dataType : 'jsonp',
success : function(data)
{
alert(data.results.length);
}
});
答案 1 :(得分:2)
jQuery在全局范围内定义您的回调函数,然后用callback=?
替换URL中的callback=nameItGaveTheFunction
。
然后它作为普通的JSONP请求运行;使用脚本标记,并将响应包装在回调函数中。
答案 2 :(得分:1)
我相信jQuery意识到它是跨域的,因此使用适当的src属性(而不是触发ajax请求)向页眉添加一个脚本标记。这会加载JSON,然后触发回调。