Как заставить jQuery вызывать службу REST, не получая ошибку Access-Control-Allow-Origin, когда у меня нет доступа к серверу? - PullRequest
1 голос
/ 16 ноября 2011

Я пытаюсь запросить RESTful-сервис, который возвращает XML, используя jQuery. У меня нет доступа к серверу, поэтому я не могу изменить вывод или заголовки, которые он предоставляет.

Я получаю ответ xml, но, конечно, я получаю ошибку межсайтового скриптинга.

Чтобы обойти это, я попытался использовать jsonp, но так как формат, который я получаю - xml, это также приводит к ошибкам: (Ресурс интерпретируется как Script, но передается с помощью приложения MIME типа application / xml.).

Я вижу ответ xml в Контенте с помощью веб-инспектора Safari, поэтому есть ли способ предотвратить эту ошибку и продолжить работу с использованием xml?

Надеюсь, это имеет смысл. Для справки вот код, который я пробовал:

Во-первых, исходный запрос ajax, приводящий к ошибке: XMLHttpRequest не может загрузить https://the -rest-url / xxx . Origin-1015 http://127.0.0.1:8020 не разрешен Access-Control-Allow-Origin (это localhost, так как я использую его для разработки на своем ПК - я также пытался выполнить развертывание на веб-сервере).

$.ajax({
    url: 'https://the-rest-url/xxx',
    success: function() {alert("success");},
    error: function() {alert("error")}
}); 

Далее следует попытка jsonp, которая возвращает xml, но вызывает ресурс , интерпретируемый как Script, но передаваемый с ошибкой application / xml типа MIME. . Я также попробовал это с dataType: "текст jsonp" и другие варианты ...

     $.ajax({
      url: 'https://the-rest-url/xxx',
      success: function() {alert("success");},
      error: function() {alert("error")},
      dataType: "jsonp",
      jsonp: "jsonpCallback"
}); 

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

1 Ответ

1 голос
/ 16 ноября 2011

Я не знаю надежного обходного пути для кросс-доменных запросов на стороне клиента, кроме JSONP.Хотя jQuery может получать ответов JSONP в форматах, отличных от JSON, начиная с версии 1.5, этот ответ должен быть совместимым с JSONP, а именно заключаться в поставляемый обратный вызов.В вашем случае у вас, вероятно, нет другого выбора, кроме как внедрить оболочку на стороне сервера ( здесь - это пример для PHP) для данных, которые вы хотите запросить, чтобы они, похоже, приходили из того же домена.

...