1

For reasons I do not understand, even though the call is successful and I get data back, I cannot retrieve nodes using getElementsByTagNameNS on xhr.responseXML when using SOAP 1.2 calls.

Hopefully my code below can help explain the issue:

var SITE_URL = (location.protocol + "//" + location.hostname + _spPageContextInfo.webServerRelativeUrl).replace(/\/$/, "");

// make an get/post request
var makeWebRequest = (function()
{
    // different ways to create xhr
    var createHTTPObject = [
        function () {return new XMLHttpRequest()},
        function () {return new ActiveXObject("Msxml2.XMLHTTP")},
        function () {return new ActiveXObject("Msxml3.XMLHTTP")},
        function () {return new ActiveXObject("Microsoft.XMLHTTP")}
    ];

    // find the way that works for this browser
    for(var i = 0; i < createHTTPObject.length; ++i)
    {
        try
        {
            createHTTPObject[i]().close
            createHTTPObject = createHTTPObject[i];
            break;
        }
        catch(e)
        {
            continue;
        }
    }

    // return a function to make the actual call
    /*
    options = {
        "url" : "...",
        "requestHeaders" : {
            "headerName" : "headerOption",
            "headerName" : "headerOption"
            ...
        },
        "postData" : "...",
        "async" : optional || true || false,
        "onComplete" : function(success, xhr)
    }
    */
    return function(options)
    {
        var async = ("async" in options && options.async !== undefined) ? options.async : true;

        var request = createHTTPObject();
        if(!request)
        {
            alert("ERROR: Unable to create an XMLHTTPRequest object.");
            return;
        }

        request.open("postData" in options ? "POST" : "GET", options.url, async);
        request.setRequestHeader("User-Agent", "XMLHTTP/1.0");

        for(headerName in options.requestHeaders)
        {
            request.setRequestHeader(headerName, options.requestHeaders[headerName]);
        }

        request.onreadystatechange = function()
        {
            if(request.readyState != 4) return;
            options.onComplete(request.status == 200, request);
            request.close;
        };

        if(request.readyState == 4) return;

        request.send(options.postData);
    };
})();

// make SharePoint web service calls
function SPWebServiceCall(service, serviceSOAPAction, soapBody)
{
    var soapRequest = '';
    soapRequest += '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
    soapRequest += '<soap:Body>' + soapBody + '</soap:Body>';
    soapRequest += '</soap:Envelope>';
    // make a web request
    makeWebRequest({
        "url" : SITE_URL + "/_vti_bin/" + service,
        "requestHeaders" : {
            "SOAPAction" : serviceSOAPAction,
            "Content-Type" : "text/xml; charset=\"utf-8\""
        },
        "postData" : soapRequest,
        "onComplete" : function(success, xhr)
        {
            // true - 4
            console.log(success + " - "  + xhr.responseXML.getElementsByTagName("List").length);
        }
    });
}

// can't get information from the xml
function SPWebServiceCall12(service, soapBody)
{
    // make a web request
    var soapRequest = '';
    soapRequest += '<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">';
    soapRequest += '<soap12:Body>' + soapBody + '</soap12:Body>';
    soapRequest += '</soap12:Envelope>';
    makeWebRequest({
        "url" : SITE_URL + "/_vti_bin/" + service,
        "requestHeaders" : {
            "Content-Type" : "application/soap+xml; charset=utf-8"
        },
        "postData" : soapRequest,
        "onComplete" : function(success, xhr)
        {
            // true - 0
            console.log(success + " - "  + xhr.responseXML.getElementsByTagName("List").length);
        }
    });
}

// will print 'true - 4'
SPWebServiceCall("lists.asmx?op=GetListCollection", "http://schemas.microsoft.com/sharepoint/soap/GetListCollection", '<GetListCollection xmlns="http://schemas.microsoft.com/sharepoint/soap/" />');
// will print 'true - 0'
SPWebServiceCall12("lists.asmx?op=GetListCollection", '<GetListCollection xmlns="http://schemas.microsoft.com/sharepoint/soap/" />');

I won't paste it here but the responseText and does show the List data...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.