Advertisement
If you have a new account but are having problems posting or verifying your account, please email us on hello@boards.ie for help. Thanks :)
Hello all! Please ensure that you are posting a new thread or question in the appropriate forum. The Feedback forum is overwhelmed with questions that are having to be moved elsewhere. If you need help to verify your account contact hello@boards.ie

Traversing XML with Javascript IE Horror Error

Options
  • 14-05-2010 1:37pm
    #1
    Registered Users Posts: 23


    Hi there all,

    Basically I use a javascript SOAP plugin to send and receive XML from a web service.

    Recently I've been experiencing intermittment (1 in every 20-30 times) errors in IE when trying to access data in the XML file.

    Bear with me on this, I'm going to try and go into a fair amount of detail to help anyone who is willing to read this:

    I have a html file, with an external javascript file attached.

    In the javascript file I include 5 global variables:
    var soapRes;
    var questionXML;
    var xRoot;
    var assessnode;
    var edStage = 0;
    
    Once the html file is at a readystate I request the XML file from the web service like this:
    function initNextStage(strA) {
    
        // Set pl Parameters here
        var pl = new SOAPClientParameters();
    // soap call   
     var r = SOAPClient.invoke(url, "LoadAssessment", pl, true, initStage_callBack);
    
    }
    
    function initStage_callBack(r, soapResponse)
    {    
    
    soapRes = soapResponse;
    
    initvalues();
    
    function initvalues(){
    
    xRoot = soapRes.documentElement;
    
    assessnode = xRoot.getElementsByTagName("ed")[0];
    
    questionXML = assessnode.getElementsByTagName("question")[edStage];    
    
    
    }
    
    }
    
    
    Once this is completed the XML should be loaded into memory via the global variable soapRes.

    I then save values to the XML before moving one node down the XML tree, and pulling the next set of values out of it.
    function submitAns1() {
    
    var objAns;
    var corElem;
    var corElemTxt;
    questionXML = assessnode.getElementsByTagName("question")[edStage];    
    objAns = questionXML.getElementsByTagName("item")[0].getAttribute("answer");
    
    corElem = soapRes.createElement("correct");
    corElemTxt = soapRes.createTextNode("value");
    questionXML.appendChild(corElem);
    corElem.appendChild(corElemTxt);
    
    if(objAns == "t") {
        
    corElemTxt.nodeValue = "true";
    
        }
    
    else {
        
    corElemTxt.nodeValue = "false";
    
    }
    
    edStage++;
    
    questionXML = assessnode.getElementsByTagName("question")[edStage];    
    
    var inc1 = questionXML.getElementsByTagName("sentence")[0];
    
    var inc2 = questionXML.getElementsByTagName("sentence")[1];
    
    var edopt1 = questionXML.getElementsByTagName("item")[0];
    
    var edopt2 = questionXML.getElementsByTagName("item")[1];
    
    var edopt3 = questionXML.getElementsByTagName("item")[2];
    
    var edopt4 = questionXML.getElementsByTagName("item")[3];
    
    var edopt5 = questionXML.getElementsByTagName("item")[4];
    
    var temp1 = edopt1.childNodes[0].nodeValue;
    var temp2 = edopt2.childNodes[0].nodeValue;
    var temp3 = edopt3.childNodes[0].nodeValue;
    var temp4 = edopt4.childNodes[0].nodeValue;
    var temp5 = edopt5.childNodes[0].nodeValue;
    
        }
    
    
    This is an example of our XML:
    <ed>
    <appid>Administrator</appid>
    <formid>ED009</formid>
    <question id="1">
    <sentence id="1">dus576@zrh.com</sentence>
    <sentence id="2">dun576@zkh.cim</sentence>
    <item id="0" answer="f" value="0">0</item>
    <item id="1" answer="f" value="1">1</item>
    <item id="2" answer="f" value="2">2</item>
    <item id="3" answer="t" value="3">3</item>
    <item id="4" answer="f" value="4">4</item>
    </question>
    <question id="2">
    <sentence id="1">Beausdene 13</sentence>
    <sentence id="2">Beauscene 83</sentence>
    <item id="0" answer="f" value="0">0</item>
    <item id="1" answer="f" value="1">1</item>
    <item id="2" answer="t" value="2">2</item>
    <item id="3" answer="f" value="3">3</item>
    <item id="4" answer="f" value="4">4</item>
    </question>
    </ed>
    
    The error I receive intermittently is that "questionXML" is null or not an object.

    Specifically this line when I call on the submitAns1() method:
    questionXML = assessnode.getElementsByTagName("question")[edStage];
    
    This solution works on FF, Opera, Chrome & Safari without any issues as far as I am aware.

    Am I accessing the XML nodes incorrectly? I've been toying with fixes for this bug for weeks now, I'd really appreciate any insight into what I'm doing wrong.

    On a side note, this is a personal project of mine - it's not university related :) - I'm much too old for that!

    Any help greatly appreciated.

    Regards,

    Sykth.


Comments

  • Registered Users Posts: 2,781 ✭✭✭amen


    just after you create your xml object but before you load your xml data tyr
    XMLObjectName.async=false;


  • Registered Users Posts: 23 Sykth


    I'll give it a go and get back to you asap! THanks for the suggestion!!


  • Registered Users Posts: 23 Sykth


    I've just realised that I've passed questionXML (global var) 2 values in the same function!

    Do you think this could be a possible cause for the intermittent error?

    See Function submitAns1() -> questionXML assigned a value twice.

    I've removed the first instance of questionXML as it wasn't needed - currently testing.


Advertisement