2013-03-21 6 views
9

ja próbuje zrobić żądania AJAX do innej domeny, to już działa, ale teraz mam inny problem ...Otrzymuj odpowiedzi XML z Cross-Domain Ajax żądanie jQuery

To jest mój kod:

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); 
     } 
    }); 
} 

Jak już powiedziałem, to już działa, ale problem polega na tym, że serwer zwraca XML (nie jest moim serwerem, jest innym serwerem innej firmy - usługą sieciową - więc nie mogę zmienić tego, co zwraca) i jak jsonp spodziewa się błędu json z błędem:

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

Zgodnie z dokumentacją jQuery, dodanie jsonp text xml powinno uczynić magię, konwertując odpowiedź na prosty tekst, a następnie analizując ją jako XML, ale to nie działa.

Byłem już w stanie zrobić to za pomocą YQL, ale ma limit 10.000 zgłoszeń na godzinę, a system, który rozwijam, ma do 10 milionów żądań na godzinę. Z tego samego powodu nie mogę "proxy" w moim własnym serwerze tych żądań ...

FYI: Próbuję uzyskać najnowsze wiadomości od SQS, więc jeśli jest tak, aby powiedzieć, aby zwrócić dane jako JSON, będzie łatwiej i lepiej, ale nie znaleźliśmy niczego albo w dokumentacji ...

+0

na forum jQuery jest wątek stwierdzający, że nie działa [wątek forum] (http://forum.jquery.com/topic/getting-xml-data-from- między domenami) mam nadzieję, że pomaga (jego roczek, ale ...) –

+0

Dzięki @winner_joiner! Już to widziałem. Po prostu myślałem, że jest to problem związany z jQuery (to znaczy, jQuery unika mnie do przeczytania odpowiedzi). Badałem cały dzień i wiem, że teraz nie mogę tego zrobić, i że można go donować z CORS, ale SQS go nie ma. S3 ma, SQS nie ... dziękuje za twoją pomoc. – Cito

Odpowiedz

10

równina odpowiedź na moje pytanie jest takie: Istnieją tylko dwa sposoby to zrobić:

  1. Użyj proxy. Nie będę tu zamieszczał wszystkich poradników, ale można znaleźć wiele informacji w sieci, wyszukując "cors", "cross domains ajax requests" i "yql" (ten ostatni jest proxy przez Yahoo)

  2. Użyj CORS. To jest Cross-Origin Resource Sharing. To znaczy: aktywuj serwer, z którego chcesz otrzymywać informacje do wysłanych informacji do dowolnej innej domeny i odpowiadaj na żądania z dowolnej innej domeny. Aby to zrobić, musisz być tym, który zarządza serwerem/usługą.

Te dwa sposoby są jedynymi sposobami uzyskania informacji XML (lub innego formatu) z innej domeny. Aby przesłać żądania json między domenami:

  • Użyj jsonp (Json Padded). Nie wyjaśniam tego (a tak naprawdę to tylko dodatkowe informacje, ponieważ nie zadziała, jeśli odpowiedź z serwera jest XML - mój główny problem), powodują, że information on the web.

Niestety nie udało mi się osiągnąć mojego celu, ponieważ SQS nie jest skonfigurowany do żadnej z tych metod ... Mimo to, mam wiele wglądu w to, jak działają żądania Cross-Domains. I mam nadzieję, że to pomoże każdemu ...