Frage

Also gut, also habe ich zuvor gefragt ... SOAP -Prototyp Ajax Soapaction Header Frage (ich kann es leider nicht hyperlink, nicht genug Rep für "2" -Links ... siehe unten)

Was nie geklappt hat. Ich denke, es hat etwas mit Prototyp zu tun, es wird eine 0 als Onsuccess zurückgeben. Ich kann die UTF-8-Formatierung vom Typ Inhalt nicht herausfinden. Wenn ich nun zu geradlinigem JavaScript zurück gehe und xmlhttprequest verwende

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

Dies nennt die OnreadyStatechange nie. Wenn Sie die Rückgabeanforderung überzeugen.

Es wird den benötigten Wert abgerufen und wenn Sie in Firebug sind, sehen Sie den ReadyState == 4 und Status == 200 (nicht, dass ich darüber nachprüfe). Normalerweise muss ich nie mit Löffel gefüttert werden, aber ich verstehe einfach nicht, warum ich die Werte, die ich vom Hörer brauche, nicht zurückgewiesen habe oder warum es nie genannt wird. Nicht, dass dies wirklich wichtig sein sollte, aber ich genehmige die Anfrage von Firefox, Cross-Domain zu sein. Es ist wirklich für Mobilgeräte, sodass der Anruf nicht eine Bestätigung der Cross-Domäne haben muss, es wird dies automatisch tun.

Ich hoffe, jemand kann sich das ansehen und sehen, was ich übersehen habe. Vielen Dank!

War es hilfreich?

Lösung

OnReadyStatEchange wird nur nach asynchronen Anforderungen an den Server aufgerufen. Ihr Code sendet eine synchrone Anfrage.

Legen Sie den dritten Parameter auf den offenen Aufruf auf true ein (oder entfernen Sie den dritten Parameter, wenn der Standard true ist).

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top