xhrPost работает по-разному с Firefox и IE8 - но как мне обработать ответ? - PullRequest
3 голосов
/ 02 сентября 2010

Я действительно не понимаю, почему я получаю другой ответ от xhrPost с Dojo. Для IE8 он работает нормально, и XML можно читать, но в Firefox он работает по-другому, и нет такого атрибута, как «serverResponse.results [0] .xml» - см. Ниже:

var serverResponse = dojo.xhrPost(xhrArgs);
serverResponse.results[0].xml

как в IE8.

Кто-нибудь знает, как правильно обрабатывать ответы в Firefox при использовании xhrPost. Приветствия.

var message = '<?xml version="1.0" encoding="utf-8"?>' +
                    '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">' +
                      '<soap12:Body>' +
                        '<MineSearch xmlns="http://localhost/">' +
                          '<x>' + inPoint.x + '</x>' +
                          '<y>' + inPoint.y + '</y>' +
                          '<buffer>' + buffer + '</buffer>' +
                        '</MineSearch>' +
                      '</soap12:Body>' +
                    '</soap12:Envelope>';




        //The parameters to pass to xhrPost, the message, and the url to send it to
        //Also, how to handle the return and callbacks.
        var xhrArgs = { url: "http://localhost/ApplicationServices.asmx?op=MineSearch",
            postData: message,
            headers: { "Content-Type": "application/soap+xml" },
            handleAs: "xml",
            sync: true,
            load: function(data) {
                dojo.byId("footer").innerHTML = "Message posted.";
            },
            error: function(error) {
                dojo.byId("footer").innerHTML = "Message error.";

            }
        }

        //Call the asynchronous xhrPost
        var serverResponse = dojo.xhrPost(xhrArgs);
        var xmldata = serverResponse.results[0].xml;
        var xmlDoc;

        if (window.DOMParser) {
            parser = new DOMParser();
            //Below is wrong somehow and the serverResponse.results[0] is probably wrong too.
            xmlDoc = parser.parseFromString(serverResponse.results[0], "text/xml");
        }
        else // Internet Explorer
        {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = "false";
            xmlDoc.loadXML(xmldata);
        }

1 Ответ

1 голос
/ 08 сентября 2010

Возвращаемый объект dojo.xhrPost является объектом dojo.Deferred, и ответ не должен быть получен из объекта dojo.Deferred.

Если вы указали handleAs как xml, вы можете получить ответный XML-документ непосредственно в функции load с помощью аргумента data.

var xhrArgs = { url: "http://localhost/ApplicationServices.asmx?op=MineSearch",
        postData: message,
        headers: { "Content-Type": "application/soap+xml" },
        handleAs: "xml",
        sync: true,
        load: function(data) {
            //data is the XML document
        },
        error: function(error) {
            dojo.byId("footer").innerHTML = "Message error.";

        }
}
dojo.xhrPost(xhrArgs);
...