Pregunta

Muy bien, así que anteriormente pregunté ... Pregunta del encabezado de jabón de jabón de jabón (no se puede hiperlinizarlo desafortunadamente, no hay suficiente representante para enlaces "2" ... ver más abajo)

Que nunca funcionó. Creo que tiene algo que ver con el prototipo, devolverá un 0 como OnSuccess. No puedo encontrar el formato UTF-8 de tipo contenido. Ahora si vuelvo a JavaScript recto y uso 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>

Esto nunca llama a OnreadyStateChange. Si desencadena la solicitud de devolución. Responsexml.childnodes [0] .ChildNodes [1] .ChildNodes [3] .ChildNodes [5] .TextContent;

Recuperará el valor necesario y si está en Firebug, verá el ReadyState == 4 y el estado == 200 (no es que lo verifique). Por lo general, nunca necesito ser alimentado con cuchara, pero no entiendo por qué no estoy recuperando los valores que necesito del oyente, o por qué nunca se llama. Además, no es que esto debería importar realmente, pero estoy aprobando la solicitud en Firefox para que sea un dominio cruzado, es realmente para dispositivos móviles, por lo que la llamada no tendrá que tener una confirmación de dominio cruzado, lo hará automáticamente.

Espero que alguien pueda ver esto y ver lo que pasé por alto. ¡Gracias!

¿Fue útil?

Solución

OnReadyStateChange solo será llamado para solicitudes asíncronas al servidor, su código está enviando una solicitud sincrónica.

Establezca el tercer parámetro en la llamada abierta a verdadero (o elimine el tercer parámetro como predeterminado es verdadero).

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top