onReadyStateChange未在IE中为XHR请求触发

时间:2015-03-25 13:10:01

标签: javascript jquery internet-explorer http xmlhttprequest

我使用的是我正在使用的代码,它在chrome中运行良好,但在IE中,看起来onreadystatechenge没有触发。

如何让它跨浏览器工作。我在IE中看到你必须在发送之前放置onreadystatechange事件,但那不起作用。

此处的警报未触发。是的,它是成功的。

if (xhr.status==200 && xhr.readyState==4)
    {
        alert("DONE!");
    }

这是整个请求。

function SendFile(evt)
{
var xhr = new XMLHttpRequest();
var data = new FormData();
var files = $("#FileUpload1").get(0).files;

for (var i = 0; i < files.length; i++)
{

    data.append(files[i].name, files[i]);
}
xhr.upload.addEventListener("progress", function (evt)
{
    if (evt.lengthComputable)
    {
        var progress = Math.round(evt.loaded * 100 / evt.total);
        $("#progressbar").progressbar("value", progress);
    }
}, false);
xhr.open("POST", "Handler.ashx");

xhr.onreadystatechange=function ()
{
    if (xhr.status==200 && xhr.readyState==4)
    {
        alert("DONE!");
    }
}
xhr.send(data);


$("#progressbar").progressbar({
    max: 100,
    change: function (evt, ui)
    {
        $("#progresslabel").text($("#progressbar").progressbar("value") + "%");
    },
    complete: function (evt, ui)
    {
        $("#progresslabel").text("File upload successful!");
        GetID();
    }
});

}

试着没有运气。

   xhr.onload = function ()
    {
        if (xhr.readyState == 4 && xhr.status==200)
        {
            alert("IE DONE!");

        }
    }

2 个答案:

答案 0 :(得分:2)

您的XMLHttpRequest对象可能正在缓存。

尝试:

var myNoCachePage = document.location + '?' + new Date().getTime();
xhr.open("GET", myNoCachePage, true);  // Prevent IE11 from caching
xhr.send();

答案 1 :(得分:1)

显然,IE 11(我假设您正在测试的内容已被破坏)已移除script.onreadystatechange,转而使用script.onload

以下是compatibility for xhr.onload.

Source of IE11 removing it