2010-01-22 3 views
0

Итак, я пытаюсь сделать запрос и передать объект SOAP, проблема в том, что он возвращается отлично (onSuccess), но responseXML там не существует. Я использовал Fiddler и HTTP Client (версия скрипта для OSX) и вводил те же запросы, стрелу, и обратно с правильным ответом. С прототипом, не так много.SOAP Prototype Ajax SOAPAction Header question

Я попытался в заголовке и в полях параметров ...

<script type="text/javascript" src="prototype.js"></script> 
<script type="text/javascript"> 
    function test(){ 
     var body = '<?xml version="1.0" encoding="utf-8"?>' + 
     '<soap:Envelope' + 
     ' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' + 
     ' xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"' + 
     ' xmlns:tns="urn:uvindexalert" xmlns:types="urn:uvindexalert/encodedTypes"' + 
     ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' + 
     ' xmlns:xsd="http://www.w3.org/2001/XMLSchema">' + 
     ' <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' + 
     ' <tns:getUVIndexAlertByZipCode>' + 
     '  <in0 xsi:type="xsd:string">92109</in0>' + 
     ' </tns:getUVIndexAlertByZipCode>' + 
     ' </soap:Body>' + 
     '</soap:Envelope>'; 

     var headers = ["SOAPAction", " ", "Content-Type", "text/xml"]; 

     var request = new Ajax.Request("http://iaspub.epa.gov/uvindexalert/services/UVIndexAlertPort?wsdl", { 
      contentType: "application/xml", 
      requestHeaders: headers, 
      parameters: "SOAPAction: ", 
      postBody: body, 
      onSuccess: function(response){ 
       var j = 0; 
      }, 
      onFailure: function(){ 
       var i = 0; 
      } 
     }); 
    } 

    test(); 
</script> 

Значение переменной я & J просто, так что я знаю, где он ломает, так что я могу проверить его. Я также посмотрел онлайн и заметил, что кто-то сказал попробовать вместо text/xml application/xml, а затем добавить charset = utf-8, поэтому я сделал все это, но все равно ничего. Кто-нибудь знает наверняка, как вернуть XML с помощью SOAPAction?

ответ

2

Проблемы с обработкой сценариев межсайтовых сайтов, я написал клиент Prototype.js SOAP раньше и имел множество проблем с заголовками Content-Type и SOAPAction. В конечном итоге я использовал следующее и работал (но только для запросов в том же домене).

Content-Type: text/xml; charset=utf-8 
SOAPAction: "" 

Веб-сервер должен отправить этот заголовок для OPTIONS запросов:

Access-Control-Allow-Origin: * 
0

Вы не можете совершать междоменные запросы с помощью Ajax. Это ограничение безопасности.

Существует несколько различных усилий для обеспечения безопасных междоменных запросов, но они не поддерживаются всеми браузерами и требуют сотрудничества с сайта, на который вы пытаетесь выполнить запросы. Вместо этого многие используют HTTP-прокси-скрипт - скрипт на вашем сервере, который получает запросы Ajax, удаляет удаленные URL-адреса и передает ответ.

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