JQuery XML REST Access-Control-Allow-Origin - PullRequest
       23

JQuery XML REST Access-Control-Allow-Origin

8 голосов
/ 07 января 2011

Я звоню REST API версии One и продолжаю получать XMLHttpRequest cannot load https://www10.v1host.com/... Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin. ошибку JavaScript. Я отправляю запрос GET, и ожидается, что в ответ будет возвращено содержимое XML. Это мой код jQuery:

$.ajax({
  dataType: "xml",
  url: "https://www10.v1host.com/...",
  success: function(data, status, xhr) {
  alert("Load was performed.");
  }
});

Я изменил dataType: "jsonp ", и с этим я получаю ответ в следующем формате:

jsonp1294354293197(<?xml version="1.0" encoding="UTF-8"?><Asset ...</Asset>)

Но получите еще одну ошибку JavaScript: "Uncaught SyntaxError: Unexpected token <"

Есть ли способ получить междоменные данные об остальных XML-файлах (что-то вроде XMLp) или сделать обходной путь для jsonp (предотвратить синтаксический анализ формата JSON и использовать мой собственный - анализ XML)?

Ответы [ 3 ]

5 голосов
/ 23 мая 2012

Это невозможно, если сервер API REST (не ваш сервер) разрешает запрос из другого источника, задав, например, заголовок HTTP CORS (Cross-Origin Resource Sharing) . установив заголовок HTTP «Access-Control-Allow-Origin» в ответе:

Access-Control-Allow-Origin: *

или

Access-Control-Allow-Origin: http://localhost:8080

Однако вы можете вызвать свой собственный сервер с помощью Ajax, а затем использовать свой собственный сервер в качестве прокси-сервера для вызова другого сервера в другом домене, проанализировать результаты XML или HTML с помощью подходящего анализатора и вернуть результат клиенту:

 client --(Ajax)--> server
                    server --(HTTP)---> Site 
                    server <----------
 client <----------
5 голосов
/ 07 января 2011

Вы не можете сделать междоменный XMLHttpRequest, точка. Что касается вашего собственного XML-анализа - это было бы возможно, если бы вы могли получить экранированную строку вместо чистого XML с сервера. Не существует магического анализа JSON - метод JSONP просто запрашивает другой скрипт, динамически добавляя <script src=...> в заголовок, все внутри обрабатывается как обычный JavaScript.

0 голосов
/ 11 апреля 2013

я знаю, что это старый вопрос, но я думаю, что есть лучший ответ через jQuery документацию :

DATATYPE

несколько, разделенных пробелами значений: начиная с jQuery 1.5, jQuery может конвертировать dataType от того, что он получил в заголовке Content-Type к чему вам требуется. Например, если вы хотите, чтобы текстовый ответ рассматривался как XML, используйте «text xml» для dataType. Вы также можете сделать JSONP запрос, получить его как текст и интерпретировать jQuery как XML: "JSONP текст XML." Аналогично, сокращенная строка, такая как «jsonp xml» сначала попытается преобразовать из JSONP в XML, и, в случае неудачи, преобразовать из jsonp в текст, а затем из текста в xml.

...