2013-04-05 55 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