无法在IE8中发送XMLHttpRequest / XDomainRequest,在xhr.send()上失败

时间:2018-02-25 22:21:17

标签: javascript asynchronous internet-explorer-8 xmlhttprequest xdomainrequest

我已经查看了答案,但似乎无法找到解决此问题的方法。此外,similar question仍未得到答复。

我使用IE8发送XMLHttpRequest但它永远不会被发送。 IE8支持XMLHttpRequest对象,为什么它不发送? (我不能为此使用jQuery。)

我的代码:

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);
}

alert('sent');永远不会被调用,但alert('sending');会被调用。如何使这个xmlhttp请求有效?

编辑:我已更新我的代码以包含针对IE8的XDomainRequest。这让我超越了xmlhttp.open部分,但现在我得到了一个"未指定的错误"在xmlhttp.send部分。

已编辑的代码(注意:我将变量名称从xmlhttp更改为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);
}

警报('错误&#39);被叫。

0 个答案:

没有答案