Получение новостных лент с помощью JQuery Ajax - PullRequest
0 голосов
/ 31 августа 2011

Мне нужно использовать вызов ajax, чтобы получить форму новостной ленты google API, и у меня есть следующий код:

function submitSearch(){
        var query = "business";
        var target = "https://ajax.googleapis.com/ajax/services/search/news?v=1.0&q=" + query + "&callback=processResults";

        $.ajax({
            url: target,
            cache: false,
            success: function(data) {
                $('#resultSet').html(data);
            },
            error: alert(target)
        });
    }

По какой-то причине использование URL-адреса непосредственно в браузере работает во время использования вызова AJAXпродолжает приводить к ошибке.

Ответы [ 3 ]

0 голосов
/ 31 августа 2011

Вы не можете делать междоменные запросы AJAX из-за политики того же источника, иначе вы можете использовать jsonp i.e json с отступом.

same-origin-policy (SOP) - это мера безопасности браузера, которая запрещает JavaScript-коду взаимодействовать с ресурсами, исходящими от других веб-сайтов, т.е. ресурсами, загруженными из любого другого домена и / или порта. например. JS, работающий на веб-странице в http://google.com, не может взаимодействовать с данными, загруженными из http://cbs.com или даже http://cbs.com:8081

Работа вокруг SOP

a) Прокси на вашем сервере: вы создаете конечную точку в своем приложении, которая обращается к внешнему URL и возвращает результат

b) Загрузить ответ JSON в тег, иначе jsonp, т.е. json с отступом

есть некоторые изменения на стороне сервера, которые сопровождают это .. читайте о том, как это сделать для вашего языка сценариев ..

в основном ответ должен выглядеть примерно так:

 jsonCallback({"Name": "Random", "Id" : 2432, "Rank": 453})
0 голосов
/ 31 августа 2011
"jsonp": Loads in a JSON block using JSONP. Adds an extra "?callback=?" to
the end of your URL to specify the callback. Disables caching by appending 
a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option
is set to true.

ref: http://api.jquery.com/jQuery.ajax/

вам нужно установить dataType:"jsonp" и удалить &callback=processData с конца URL

var query = "business";
var target = "https://ajax.googleapis.com/ajax/services/search/news?v=1.0&q="+query;
$.ajax({
    url: target,
    cache: false,                   
    dataType:'jsonp',          
    success: function(data) {
        alert(data.responseData.results[0].GsearchResultClass);

    },
    error: function(jxhr,e){
    alert(jxhr.status+" - "+e.responseText);        
    }
});

здесьскрипка http://jsfiddle.net/6gCRF/8/

0 голосов
/ 31 августа 2011

Вы не можете отправлять запросы AJAX между доменами. (См. Политику происхождения доменов)

Тем не менее, есть обходной путь: JSONP. По сути, это взлом, но он выполняет свою работу. Что касается конкретной реализации JQuery: http://api.jquery.com/jQuery.getJSON/

...