rixter
rixter

Reputation: 1301

How do I get the XMLhttp responseText?

I am not too familiar with the xmlhttp object, and despite the available documentation, am having trouble getting the responseText. Am so close, but would appreciate anyone who could point out why the following does not work; after the send() it just dies...:

function fetchgenotype() {
    // here's where we use an Ajax function to fetch the allele values without reloading the page.
    // Get the index number of the genotype record to retrieve; retrieve it; populate the alleles.
    var mndx, sndx = 0;
    mndx = $('#marker').val();
    if (Study_selected) {
        sndx = $('#stylabid').val();
    } else {
        sndx = $('#pjtlabid').val();
    }
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            // Recieve the return value, parse and assign to screen form. 
            var allele_stg = "";
            allele_stg = document.getElementById("allele_ary").innerHTML = xmlhttp.responseText;
            ary = new Array();
            ary = str_getcsv(allele_ary, ',');
            $('#allele_1_1').val() = ary[0];
            $('#allele_1_2').val() = ary[1];
        }
    }
    xmlhttp.open("GET", "fetchAlleles.php?mndx=" + mndx + "&sndx=" + sndx, true);
    xmlhttp.send();
} // end of fetchgenotype

Upvotes: 1

Views: 519

Answers (1)

pete
pete

Reputation: 25081

You can see what results you're actually getting by changing your if statement to:

if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    // Receive the return value, parse and assign to screen form. 
    var allele_stg = "",
        rText = xmlhttp.responseText;
    /*
     * By assigning xmlhttp.responseText to a seperate variable
     * you can now check to make sure rText contains what you
     * expect to see.
     * 
     * By making the call to getElementById and assigning the
     * innerHTML property in separate statements, you can now
     * check to make sure that getElementById is returning a
     * DOM element, or if it's undefined.
     */
    allele_stg = document.getElementById("allele_ary");
    allele_stg.innerHTML = rText;
    ary = new Array();
    ary = str_getcsv(allele_ary, ',');
    $('#allele_1_1').val() = ary[0];
    $('#allele_1_2').val() = ary[1];
} else {
    console.log('xmlhttp.readyState:' + xmlhttp.readyState);
    console.log('xmlhttp.status:' + xmlhttp.status);
}

and then monitoring the console. I suspect you are either not getting a 200 xmlhttp.status or xmlhttp.readyState is never getting to 4.

Upvotes: 1

Related Questions