【问题标题】:Is there AJAX progress event in IE and how to use it?IE中是否有AJAX进度事件以及如何使用它?
【发布时间】:2012-10-03 16:39:14
【问题描述】:

我尝试了所有我能想到的至少在 IE9 中使用进度功能的方法,但没有任何效果。所有其他浏览器都可以进入进度功能并毫无问题地编写测试文本。希望有人可以帮助我。谢谢!

     var info = document.getElementById('info');
     var xhr;
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();  
        } 
        else if (window.ActiveXObject) { 
            try {  
                xhr = new ActiveXObject("Msxml2.XMLHTTP");  
            } 
            catch (e) {  
                try {  
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");  
                } 
                catch (e) {}  
            }  
        }
        xhr.attachEvent("onprogress", function(e) {
            info.innerHTML += "loading...<br />";   
        });

        /*xhr.addEventListener("progress", function(e) {
            info.innerHTML += "loading...<br />";   
        }, false);*/

        xhr.open("GET", "10_MB_File.txt", true);
        xhr.send(null);

【问题讨论】:

  • 不幸的是,progress 事件,但我在这种情况下检测到它:typeof this.ProgressEvent === 'function'。其中thiswindow,全局对象。

标签: javascript ajax internet-explorer events progress


【解决方案1】:

如果您的项目中使用了 JQuery,则添加到建议列表。可以通过下面的函数来实现,当然需要JQuery $.ajax 请求。这些客户端库的优点是它们具有基于浏览器实例化的对象。例如:JQuery 根据浏览器处理 "ActiveXObject("Msxml2.XMLHTTP")" 或 "ActiveXObject("Microsoft.XMLHTTP")"。

//displays progress bar
$('#info').ajaxStart(function () {
    $(this).show();
}).ajaxStop(function () {
    $(this).hide();
});

【讨论】:

  • 是的,在实际程序中我使用 jQuery。但是如果 IE
  • 如果您调用 $.ajax/$.get/$.post 进行 AJAX 操作,我发布的 ajaxStart() 函数作为进度事件显示进度条。我检查了它的 IE 6,它工作正常。
  • 但是,它只将静态内容(图像/html)显示为进度条。如果它需要像加载字节这样的实时进度,则需要搜索其他替代方案。在我阅读的一些文章中,一种方法是通过快速显示 90% 的进度来欺骗用户界面,然后在收到服务器的响应后完成剩余的 10%。
【解决方案2】:

您可以使用onreadystatechange 事件并显示您的消息。我只是建议将其作为一种解决方法。

xhr.onreadystatechange=function() {
    if (xhr.readyState != 4) {
        // Display a progress message here.
    } else if (xhr.readyState==4 && xhr.status==200) {
        // Request is finished, do whatever here.
    }
}

【讨论】:

  • 谢谢。在实际程序中,带宽速度计,我需要根据加载的字节数/经过的秒数来旋转速度指针,所以......
【解决方案3】:

onprogress 事件是 XMLHttpRequest Level 2 规范的一部分...

... IE 9 及以下版本不支持。但是,IE 10 应该支持它...

有关哪些浏览器支持 XHR Level 2 的更多信息,请访问 caniuse.com...

【讨论】:

  • 谢谢。我只是从不认为 IE 过时了……是的,在 Windows8 中,IE10 为我展示了进步。
  • 不客气!是的... IE 非常糟糕。如果你在做跨域 AJX,小心!!!
【解决方案4】:

IE9及以下不支持onprogress,所以你不能让它工作。

var xhr = new XMLHttpRequest();
console.log('onprogress' in xhr);

【讨论】:

  • 你为什么要创建 XMLHttpRequest 的新对象?
猜你喜欢
  • 2011-02-17
  • 1970-01-01
  • 2018-11-02
  • 2013-02-21
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2018-01-17
相关资源
最近更新 更多