Запрос перекрестного домена jQuery для получения ответа JSON без обратного вызова - программирование
Подтвердить что ты не робот

Запрос перекрестного домена jQuery для получения ответа JSON без обратного вызова

Я пытаюсь получить JSON из этого URL

http://www.iheartquotes.com/api/v1/random?format=json

через jQuery. Я знаю, что решение JSONP, но поскольку я не контролирую текст ответа службы или обертываю его в свою собственную функцию обратного вызова, моя цель - как-то получить ответ на вышеуказанный URL-адрес, используя сценарии конца клиента.

Я попробовал почти все методы, предложенные из нескольких ответов StackOverflow. Это коды кода, которые я пробовал, и ответ, который у меня есть.

1. Прямой вызов, который возвратил ожидаемую ошибку Access-Control-Allow-Origin

$.getJSON("http://www.iheartquotes.com/api/v1/random?format=json",
   function(data) {
     alert(data);         
   });

Ответ:

XMLHttpRequest не может загрузить = 1376682146029 " > http://www.iheartquotes.com/api/v1/random?format=json&=1376682146029. Происхождение /qaru.site/... не допускается Access-Control-Allow-Origin.

2. Вышеприведенный код с добавленным параметром обратного вызова:

$.getJSON("http://www.iheartquotes.com/api/v1/random?format=json&callback=?",
   function(data) {
     alert(data);         
   });

Ответ:

Uncaught SyntaxError: Неожиданный токен:

Обратите внимание, что когда я нажимаю на ошибку, она возвращает меня к ожидаемому ответу JSON.

{"json_class":"Fortune","tags":["simpsons_homer"],"quote":"Holy Moly!  The bastard rich!\n\n\t\t-- Homer Simpson\n\t\t   Oh Brother, Where Art Thou?","link":"http://iheartquotes.com/fortune/show/5501","source":"simpsons_homer"}

Это также ожидается, поскольку в ответе нет функции обратного вызова.

3. Через метод jQuery Ajax

$.ajax({ 
   type: "GET",
   dataType: "jsonp",
   url: "http://www.iheartquotes.com/api/v1/random?format=json",
   success: function(data){        
     alert(data);
   },
});

Ответ:

Uncaught SyntaxError: Неожиданный токен:

Добавление параметра обратного вызова к указанной выше функции не изменяет ответ.

Любая помощь или указатели экспертов для извлечения JSON из URL-адреса? Я тестирую это из Chrome Dev Tools. Я знаю, что я мог бы вызвать службу из кода на сервере, а затем отправить ее на клиентский конец. Но я хочу посмотреть, можно ли это сделать через jQuery отдельно от клиента.

EDIT: Основано на комментарии Кевина Б: Получил ожидаемый результат через YQL, используя jQuery Ajax. Но мой вопрос остается прежним. Есть ли собственный способ сделать это через jQuery, поскольку YQL по-прежнему является зависимостью?

// Using YQL and JSONP
$.ajax({
    url: "http://query.yahooapis.com/v1/public/yql",

    // the name of the callback parameter, as specified by the YQL service
    jsonp: "callback",

    // tell jQuery we're expecting JSONP
    dataType: "jsonp",

    // tell YQL what we want and that we want JSON
    data: {
        q: "select * from json where url=\"http://www.iheartquotes.com/api/v1/random?format=json\"",
        format: "json"
    },

    // work with the response
    success: function( response ) {
        console.log( response.query.results.json ); // server response
    }
});

Это дает ожидаемый ответ.

4b9b3361

Ответ 1

Это не будет работать во всех браузерах, но в зависимости от того, какую версию JQuery вы используете, попробуйте:

$.support.cors = true;

Очевидно, что это также зависит от заголовков ответа сервера.