Я пытаюсь получить 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
}
});
Это дает ожидаемый ответ.