Проблема с использованием $ .getJSON () с jQuery - PullRequest
3 голосов
/ 16 мая 2011

Я пытаюсь запустить следующее:

$.getJSON('http://services.digg.com/2.0/story.getTopNews?limit=25&callback=?', function(data) {
    console.log(data);
});

Но я получаю:

story.getTopNews: -1Resource интерпретируется как Script, но передается с приложением MIME-типа / json,story.getTopNews: 2Uncaught SyntaxError: Неожиданный токен:

Я также пробовал что-то вроде этого:

var url = "http://services.digg.com/2.0/story.getTopNews?limit=25";

$.ajax({
    url: url,
    crossDomain:true,
    dataType: "json",
    success:function(data,text,xhqr) {
        console.log(data);
    }
});

Я получаю это:

XMLHttpRequest не может загрузить http://services.digg.com/2.0/story.getTopNews?limit=25. Origin http://sumews.com не разрешен Access-Control-Allow-Origin.services.digg.com/2.0/story.getTopNews?limit=25GET http://services.digg.com/2.0/story.getTopNews?limit=25 undefined (undefined)

Любая помощь будет принята с благодарностью.

1 Ответ

4 голосов
/ 16 мая 2011

Междоменные запросы AJAX запрещены политикой одного и того же происхождения .Это означает, что вы не можете выполнять междоменные запросы обычным способом и является причиной ошибок во втором примере.

В первом примере вы пытаетесь обойти эту проблему - JSONP.Это работает путем помещения элемента script на страницу, которая ссылается на внешний скрипт.Внешний сценарий должен ответить, заключив данные в вызов функции.Если внешний сценарий не поддерживает это (и похоже, что digg этого не делает), вы не можете использовать обходной путь JSONP.

Поскольку сервер отправляет данные JSON (поскольку он не поддерживает JSONP), ваш браузер получаетсбит с толку, когда он пытается разобрать его как обычный Javascript.Это причина ваших первых ошибок.


Кажется, что digg поддерживает поддержку JSONP, но ему необходим дополнительный аргумент type=javascript:

$.getJSON('http://services.digg.com/2.0/story.getTopNews?limit=25&type=javascript&callback=?', function(data) {
    console.log(data);
});

Это работает для меня.

...