2013-03-28 148 views
0

我想做一些跨域數據請求。首先,我嘗試在YQL中運行:爲什麼YQL工作但不是JSONP?

<script type="text/javascript"> 
$(document).ready(function(){ 
    var myURL = 'http://example.com'; 
    var xpathVariable = '...'; 
    var yql = "http://query.yahooapis.com/v1/public/yql?q=" + encodeURIComponent("SELECT * FROM html WHERE url='" + myURL + "'") + "%20AND%20xpath%3D'%2F%2Fdiv%5B%40id%3D%22" + xpathVariable + "%22%5D" + "&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=?"; 

    jQuery.getJSON(yql, function(data){ 
     var divToUpdate = $('#container'); 

     jQuery.each(data.query.results.span, function(i, spanItem){ 
     $('<div>' + spanItem.content + '</div>').appendTo(divToUpdate); 
     if(i == 4) return false; 
     }); 
    }); 
}); 
</script> 

按預期顯示在div容器中的結果。

然後我想我給它使用jQuery的JSONP一個嘗試,這裏是代碼:

<script type="text/javascript"> 
$(document).ready(function(){ 
    var myURL = 'http://example.com/search?type=2561&location=1562';  

    jQuery.ajax({ 
     type: 'GET', 
     url: myURL, 
     dataType: 'jsonp', 
     jsonp: false, 
     jsonpCallback: 'requestCallback',       
     error: function(xhr, status, error){ 
      alert('error'); 
     } 
    }); 

    function requestCallback(data){ 
     console.log(data); 
    }  
}); 

</script> 

在這一刻,我只是想顯示在控制檯日誌回調JSON數據,我不知道我做錯了什麼,因爲它拋出了錯誤信息。由於JSONP默默地失敗,我無法弄清楚哪部分代碼不正確。有人可以幫忙嗎?

+1

YQL支持跨域請求,因此您向雅虎做了跨域請求,並且他們向服務器端的第三方發送請求,其中對跨域請求沒有限制。所以YQL總是有效的,即使你使用的服務不支持JSONP和跨域請求,你甚至可以使用它來進行搜索等。 – adeneo

+0

所以你說的遠程服務器可能不支持JSONP? – user1824996

+0

@ user1824996這確實是一種可能性。 –

回答

0

請參閱這是一個由yahoo提供的Web服務。根據我的知識,該後端Web服務使用一些Web抓取工具,通過該工具,它將從您提供的URL中提取數據,然後將提取的數據JSON的形式。

相關問題