Pergunta

Tudo bem, então anteriormente eu perguntei ... Soap Prototype Ajax SoapAction Header Pergunta (Não posso hiperlink infeliz

Que nunca deu certo. Eu acho que tem algo a ver com o protótipo, ele retornará um 0 como Onsuccess. Não consigo descobrir a formatação UTF-8 do tipo conteúdo. Agora, se eu voltar ao JavaScript reto e usar xmlhttprequest

<html xmlns="http://www.w3.org/1999/xhtml">

    function getUVIndex() {
        // In Firefox, we must ask the user to grant the privileges we need to run.
        // We need special privileges because we're talking to a web server other
        // than the one that served the document that contains this script. UniversalXPConnect
        // allows us to make an XMLHttpRequest to the server, and
        // UniversalBrowserRead allows us to look at its response.
        // In IE, the user must instead enable "Access data sources across domains"
        // in the Tools->Internet Options->Security dialog.
        if (typeof netscape != "undefined") {
            netscape.security.PrivilegeManager.
                    enablePrivilege("UniversalXPConnect UniversalBrowserRead");
        }
        // Create an XMLHttpRequest to issue the SOAP request. This is a utility
        // function defined in the last chapter.
        var request = new XMLHttpRequest();
        // We're going to be POSTing to this URL and want a synchronous response
        request.open("POST", "http://iaspub.epa.gov/uvindexalert/services/UVIndexAlertPort?wsdl", false);

        request.onreadystatechange=function() {
                if (request.readyState==4) {
                    var index = request.responseXML.getElementByTagName('index')[0].firstChild.data;
                    alert(request.responseText);
                }
            }
        // Set some headers: the body of this POST request is XML
        request.setRequestHeader("Content-Type", "text/xml");
        // This header is a required part of the SOAP protocol
        request.setRequestHeader("SOAPAction", '""');
        // Now send an XML-formatted SOAP request to the server
        request.send(               
            '<?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">12306</in0>' +
            '   </tns:getUVIndexAlertByZipCode>' +
            '  </soap:Body>' +
            '</soap:Envelope>'

            );
        // If we got an HTTP error, throw an exception
        if (request.status != 200) throw request.statusText;

        //return request.responseXML.childNodes[0].childNodes[1].childNodes[3].childNodes[5].textContent;
    }

    getUVIndex();
</script>

Isso nunca chama o onreadystatechange. Se você não dominar a solicitação de retorno.Responsexml.ChildNodes [0] .ChildNodes [1] .ChildNodes [3] .ChildNodes [5] .TextContent;

Ele recuperará o valor necessário e, se você estiver no Firebug, verá o ReadyState == 4 e o status == 200 (não que eu verifique isso). Normalmente, eu nunca preciso ser alimentado com colher, mas simplesmente não entendo por que não estou recuperando os valores de volta do ouvinte, ou por que nunca é chamado. Além disso, não que isso realmente importa, mas estou aprovando a solicitação do Firefox para ser domínio cruzado, é realmente para celular, para que a chamada não precise ter uma confirmação de domínio cruzado, fará isso automaticamente.

Espero que alguém possa olhar para isso e ver o que eu esqueci. Obrigado!

Foi útil?

Solução

OnreadyStateChange será chamado apenas para solicitações assíncronas ao servidor, seu código está enviando uma solicitação síncrona.

Defina o terceiro parâmetro na chamada aberta como true (ou remova o terceiro parâmetro como padrão é verdadeiro).

request.open("POST", "http://iaspub.epa.gov/uvindexalert/services/UVIndexAlertPort?wsdl", true);

http://msdn.microsoft.com/en-us/library/ms536648(vs.85).aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top