Can't send XMLHttpRequest/XDomainRequest in IE8, fails on xhr.send()

368 views Asked by At

I've looked through answers but can't seem to find one that fixes this particular problem. Also a similar question is still unanswered.

I am using IE8 to send a XMLHttpRequest but it never gets sent. IE8 supports XMLHttpRequest objects, so why isn't it sending? (I can't use jQuery for this.)

My code:

window.onload = function() {
    // Create the HTTP object
    var xmlhttp;
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        alert("couldn't load data");
    }

    var dataUrl = "./data2.json";
    alert("sending");
    xmlhttp.open("GET", dataUrl, true);
    alert("sent");

    xmlhttp.onreadystatechange = function() {
        //ready?
        if (xmlhttp.readyState != 4)
            return false;

        //get status:
        var status = xmlhttp.status;

        //maybe not successful?
        if (status != 200) {
            alert("AJAX: server status " + status);
            return false;
        }

        //Got result. All is good.
        alert(xmlhttp.responseText);

        return true;
    }
    xmlhttp.send(null);
}

The alert('sent'); never gets called, but alert('sending'); does. How can I make this xmlhttp request work?

Edit: I've updated my code to include XDomainRequest for IE8. This gets me past the xmlhttp.open part, but now I'm getting an "Unspecified error" on the xmlhttp.send part.

edited code (Note: I changed my variable name from xmlhttp to xhr.):

window.onload = function() {
    // Create the HTTP object
    var xhr;
    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else {
        alert("couldn't load data");
    }

    var dataUrl = "./data2.json";
    alert("sending");

    if ("withCredentials" in xhr) {
        // XHR for Chrome/Firefox/Safari
        xhr.open('get', dataUrl, true);
    }else if (typeof XDomainRequest != "undefined") {
        // XDomainRequest for IE.
        xhr = new XDomainRequest();
        xhr.open('get', dataUrl);
        alert("opened");
    } else{
        alert('CORS not supported');
    };

    xhr.onprogress = function () { };
    xhr.ontimeout = function () { };
    xhr.onerror = function () { alert('error'); };
    xhr.onload = function() {
     alert(xhr.responseText);
    }
    setTimeout(function () {xhr.send();}, 0);
}

alert('error'); gets called.

0

There are 0 answers