2012-06-01 32 views
15

我下载了Jquery UI autoload,寻找remote-jsonp.html。这是AJAX的功能,但我打开控制台..我看不到我的控制台任何请求......dataType jsonp和JSON之间的区别

是什么的dataType之间的差异;的dataType“JSONP”和;“JSON”

$("#city").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       url: "http://ws.geonames.org/searchJSON", 
       dataType: "jsonp", 
       data: { 
        featureClass: "P", 
        style: "full", 
        maxRows: 12, 
        name_startsWith: request.term 
       }, 
       success: function(data) { 
        response($.map(data.geonames, function(item) { 
         return { 
          label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName, 
          value: item.name 
         } 
        })); 
       } 
      }); 
     }, 

参考http://jqueryui.com/demos/autocomplete/remote-jsonp.html

回答

26

dataType: jsonp对于跨域请求,这意味着请求到不同的域和dataType: json对于相同的域相同的原始请求。

使用JSONP加载JSON块。添加额外的“?callback =?”到您网址的末尾 以指定回叫。除非高速缓存 选项设置为true,否则通过向URL追加 查询字符串参数“_ = [TIMESTAMP]”来禁用高速缓存。

阅读same origin policy

了解更多关于jQuery AJAX

+0

'跨浏览器'或'跨域'? :s –

+1

@Joy绝对跨域。 –

+0

@Joy感谢 – thecodeparadox

7

随着JSONP,你不应该看到一个Ajax请求,如果这就是你要找的内容。但是,您应该看到对资源的​​请求,因为JSONP用于跨域调用来从不同域中获取数据。

它返回包装在函数名中的JSON数据。 jQuery处理幕后的函数名并将数据传递到您的成功处理程序中。数据通过动态创建脚本元素来加载,其中src属性指向被调用的服务,然后附加到浏览器的DOM。然后,浏览器向资源发出请求,Web服务使用回调函数和数据进行响应。