2013-04-05 54 views
2

好的。我到處搜查,沒有找到任何可以理解的答案。 請注意,它是我第一次實施這種請求。 (「發生在我認爲的每個人身上」):P 問題:我有一個json文件,例如https://www.example.com/something.json,我想通過使用Ajax的JSONP來請求它。 我讀過,爲了使一個JSONP請求,你必須將數據包裝到回調函數。所以我編輯了生成json文件的php文件,並添加了$ _GET('callback')函數來包裝數據。所以如果我輸入瀏覽器https://www.example.com/something.json/?callback=jsonpCallBack我可以看到我的數據包裝jsonpCallBack([{.......}]);使用jQuery使用Ajax進行純JSONP請求

在jQuery中,現在我試圖訪問這些信息並每隔20秒將數據附加到html。 所以我有

 var url='https://www.example.com/something.json/?callback=jsonpCallBack'; 

     var main= $.ajax({ 
       type:'GET', 
       url : url, 
       dataType:'jsonp', 
       jsonpCallback:'jsonpCallBack', 
       success: function(data) 
       { 
        ....... 
        var outputhtml='<ul>'; 
        var item = []; 
         for(var i =0; i < data.length-1 ;i++) 
         { 

         var item = data[i]; 
         .......... 
        $('.div').html(outputhtml) ; 
       } 

      }); 

setInterval(function() { 
    main; 
},20000); 

    main; 

而是我不能看到我的數據更新。我錯過了什麼?我還需要使用$ .getJSON()函數來獲取數據嗎?如果是的話,代碼中會添加哪些內容?

很多困惑......

回答

0

嘗試這樣的:

var main = function() { 
    var url = 'https://www.example.com/something.json/'; 
    $.ajax({ 
     url: url, 
     jsonp: 'callback', 
     dataType: 'jsonp', 
     success: function (result) { 
      ... 
     } 
    }); 
}; 

window.setInterval(main, 20000); 
main(); 

這將工作,如果https://www.example.com/something.json/?callback=foobar返回結果如下(你提到的是你的問題的情況下,對吧?):

foobar({...}) 
+0

這將適用於跨域請求?我已經允許所有的CORS。 – paranoid 2013-04-06 11:47:02

+1

如果你已經讓你的服務器端腳本返回'JSONP'而不是'JSON',這將適用於跨域AJAX請求。 – 2013-04-06 16:09:44

+0

我已經嘗試了上面的代碼,但數據不會隨每個ajax請求一起更新。我也在Chrome中收到此警告: 將資源解釋爲腳本,但以MIME類型text/html傳輸:「https://www.example.com/json/something.json/?callback=jsonp1365783919785」。 jquery.min.js:127 c.extend.ajax jquery.min.js:127 (匿名函數)widget.js:58 c.extend.ready 但是當我點擊刷新頁面的數據正在改變!這太奇怪了!:S – paranoid 2013-04-12 16:27:41