2010-01-22 5 views
0

Donc j'essaye de faire une requête et passer un objet SOAP, le problème est qu'il revient bien (onSuccess) mais le responseXML n'est pas là. J'ai utilisé Fiddler et HTTP Client (version OSX de fiddler) et entré les mêmes requêtes, boom, les deux avec la bonne réponse. Avec le prototype, pas tellement.SOAP Prototype Ajax SOAPAction En-tête question

J'ai essayé dans l'en-tête et dans les champs de paramètres ...

<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> 

Le var i & j ne sont que je sais donc où il se casse, je peux l'inspecter. J'ai aussi regardé en ligne et j'ai remarqué que quelqu'un a dit essayer plutôt que text/xml application/xml puis ajouter charset = utf-8 donc j'ai fait tout ça mais toujours rien. Quelqu'un sait-il à coup sûr comment récupérer XML avec un SOAPAction?

Répondre

2

multisites problèmes de sécurité de script côté, je l'ai écrit un client SOAP Prototype.js avant et a eu beaucoup de problèmes avec les en-têtes « Content-Type » et « SOAPAction ». J'ai finalement utilisé ce qui suit et cela a fonctionné (mais seulement pour les demandes dans le même domaine).

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

Le serveur Web doit envoyer cet en-tête pour les demandes OPTIONS:

Access-Control-Allow-Origin: * 
0

Vous ne pouvez pas effectuer de requêtes interdomaines avec Ajax. C'est une restriction de sécurité. Des efforts différents sont en cours pour permettre des requêtes sécurisées entre domaines, mais ils ne sont pas pris en charge par tous les navigateurs et nécessitent une coopération du site auquel vous tentez de faire des demandes. De nombreuses personnes utilisent à la place un script proxy HTTP: un script sur votre serveur qui reçoit les requêtes Ajax, contacte les URL distantes et transmet la réponse.