2012-06-01 31 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服務使用回調函數和數據進行響應。