Ajax и REST: Могу ли я отправить запрос ajax службе REST для получения ответа? - PullRequest
0 голосов
/ 23 марта 2010

Я хочу использовать mootools и класс SqueezBox для обработки запроса к сервису RESTful. Я не хочу использовать какой-либо серверный скрипт. Я использую AJAX. Я отправляю запрос на следующий URL, используя метод GET. http://www.idevcenter.com/api/v1/links/links-upcoming.json но я получаю ошибку 404. Это потому что межсайтовый скриптинг? вот мой код:

SqueezeBox.initialize({handler:'url',ajaxOptions:{method:'GET'}});
$('a.modal').addEvent('click',function(e){
    new Event(e).stop();
    SqueezeBox.fromElement($('a.modal'));
});

В консоли Firebug иногда отображается «aborted», а иногда «404». Что не так с этим?

Ответы [ 2 ]

2 голосов
/ 23 марта 2010

XMLHttpRequest подчиняется Политика аналогичного происхождения ;если документ, в котором выполняется JavaScript, не имеет того же происхождения, что и служба, которую вы пытаетесь вызвать, этот вызов будет запрещен по соображениям безопасности.

В настоящее время существует предлагаемый стандарт для cross-оригинальное распределение ресурсов для решения этой проблемы.Возможно, служба, которую вы пытаетесь использовать, поддерживает ее;если это так, то может работать браузер, который реализует CORS (последние версии Firefox и Chrome, как и некоторые другие).IE8 поддерживает его , но требует дополнительной работы.

0 голосов
/ 23 марта 2010

Вы не можете использовать XMLHttpRequest (то есть обычный «ajax») для вызова службы на сервере, который не находится в вашем домене.

Однако вы можете использовать трюк JSONP, который использует преимуществатот факт, что браузер будет загружать Javascript из других доменов.Однако служба должна знать, что вы собираетесь это сделать, и должна понимать протокол.Этот конкретный сервис, кажется, совершенно готов дать мне ответ JSON, но он не обращает внимания, когда я задаю ему параметр «обратного вызова».(Я пробовал и «обратный вызов», и «jsonp», а возвращаемый BLOB-объект JSON одинаковый, без оболочки вызова функции.)

...