2013-03-28 3 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, как ожидалось.

Тогда я думал, что я дам ему попробовать с JSONP JQuery, вот это код:

<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 поддерживает кросс-доменные запросы, поэтому вы отправляете запрос на перекрестный домен в Yahoo, и они делают запрос третьей стороне на сервере, где нет ограничений на запросы перекрестных доменов. Таким образом, YQL всегда работает, даже если служба, которую вы используете, не поддерживает JSONP и междоменные запросы, вы даже можете использовать ее для очистки и т. Д. – adeneo

+0

Итак, вы говорите, что удаленный сервер может не поддерживать JSONP? – user1824996

+0

@ user1824996 Это действительно возможность. –

ответ

0

См. Это веб-сервис, предоставляемый yahoo. По моим сведениям, эта веб-служба в бэкэнд использует некоторый инструмент для очистки веб-страниц, с помощью которого он будет извлекать данные из URL-адреса, предоставленного вами, а затем возвращать извлеченные данные в форма JSON.

Смежные вопросы