2013-03-21 2 views
9

Я пытаюсь сделать запрос Ajax на другой домен, он уже работает, но теперь у меня есть еще одна проблема ...Получить ответ XML из запроса междоменной Ajax с JQuery

Это мой код:

function getChannelMessages(channel) { 
    jQuery.support.cors = true; 
    $.ajax(channel, { 
     cache : true, 
     type : "get", 
     data : _channels[channel].request, 
     global : false, 
     dataType : "jsonp text xml", 
     jsonp : false, 
     success : function jsonpCallback (response) { 
      console.log(response); 
      updateChannelRequest(channel); 
      //getChannelMessages(channel); 
     } 
    }); 
} 

Как я уже сказал, это уже работает, но проблема заключается в том, что сервер возвращает XML (не мой сервер, это другой сервер из другой компании - веб-служба, поэтому я не могу изменить то, что он возвращает) и как jsonp ожидает, что json не сработает с ошибкой:

SyntaxError: syntax error 
<?xml version="1.0"?><ReceiveMessageResponse xmlns="http://q ... /> 

Согласно документации jQuery, добавление jsonp text xml должно сделать волшебство, преобразование ответа на простой текст и затем разбор его как XML, но оно не работает.

Я уже смог сделать это с помощью YQL, но он имеет ограничение в 10 000 запросов в час, а система, которую я разрабатываю, будет иметь до 10 миллионов запросов в час. По этой же причине я не могу «прокси» на своем собственном сервере этих запросов ...

FYI: Я пытаюсь получить самые новые сообщения от SQS, поэтому, если есть все равно, чтобы сообщить об этом, чтобы вернуть данные в формате JSON, будет легче и лучше, но я не нашел ничего ни в документации ...

+0

В форуме jQuery есть нить, заявляющая, что она не работает [forum-thread] (http://forum.jquery.com/topic/getting-xml-data-from- кросс-домен) Я надеюсь, что это поможет (его один год, но ...) –

+0

Спасибо @winner_joiner! Я уже видел это. Просто я думал, что проблема связана с jQuery (я имею в виду, что jQuery не позволяет мне прочитать ответ). Я исследовал весь день, и теперь я знаю, что не могу этого сделать, и что он может быть наделен CORS, но SQS его не имеет. S3, SQS не ... спасибо за вашу помощь. – Cito

ответ

10

Простой ответ на мой вопрос заключается в следующем: есть только два способа сделать это:

  1. Используйте прокси. Я не стану использовать все инструкции для этого, но вы можете найти много информации в Интернете, ищущей «cors» «перекрестные домены ajax-запросов» и «yql» (это последнее является прокси-сервером Yahoo)

  2. Использование CORS. Это Cross-Origin Resource Sharing. То есть: активируйте сервер, с которого вы хотите получить информацию, чтобы отправлять информацию в любой другой домен и отвечать на запросы из любого другого домена. Для этого вы должны управлять сервером/сервисом.

Эти два являются единственными способами получения информации XML (или любого другого формата) из другого домена. Чтобы сделать запросы перекрестного домена json:

  • Использовать jsonp (Json Padded). Я не буду объяснять это (и на самом деле это просто дополнительная информация, так как он не будет работать, если ответ с сервера - это XML - моя основная проблема), вызывают there isa lot ofinformation on the web.

К сожалению, я не смог выполнить свою задачу, потому что SQS не настроен ни на один из этих методов ... Тем не менее, у меня есть много информации о том, как работает Cross-Domains Requests. И я надеюсь, что это поможет любому ...

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