2011-05-15 3 views
3

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

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

Но я получаю:

story.getTopNews: -1Resource интерпретируется как сценарий, но переносится с Приложение 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. Происхождение 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)

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

ответ

4

Запросы на использование AJAX по нескольким доменам запрещены same-origin policy. Это означает, что вы не можете выполнять междоменные запросы обычным способом и являетесь причиной ошибок во втором примере.

В первом примере вы пытаетесь обходным путем - 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); 
}); 

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

+1

+1 Что еще можно пожелать разработчикам? - Хорошие вопросы, возникающие из реальных ситуаций, и отличные ответы, подобные этому здесь. Добавьте к этому некоторые попытки самостоятельно, борясь с проблемой, и у вас есть лучший опыт обучения бесплатно, любезно предоставлены SO и его отличным сообществом. –

+0

Я бы не сказал это лучше сам! Спасибо за помощь lonesomeday! –

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