【问题标题】:ajax not working in IEajax 在 IE 中不起作用
【发布时间】:2010-11-04 21:16:15
【问题描述】:

我的 AJAX 遇到了这个问题,它在 IE 中不起作用,但在 FF 中起作用。我从 w3schools 网站上获得了以下大部分代码,所以我不明白为什么会出错。谁能帮我吗?

<script type="text/javascript">
    function checkRefresh(str)
    {
        if (str=="") {
            document.getElementById("lastCallID").innerHTML="";
            return;
        }

        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) {
                if (document.getElementById("lastCallID").innerHTML < xmlhttp.responseText) {
                    GoPopUp();  
                } else {
                    setTimeout('checkRefresh()',15000)
                }
            }
        }
        xmlhttp.open("GET","getnewid.php",true);
        xmlhttp.send();
    }
</script>

谢谢!

编辑:据我所知,它在 IE6 -8 中不起作用。基本上这个想法是,ajax 调用一个脚本,该脚本运行一个 php 页面,该页面获取数据库中的最新 ID。然后它将来自 php 页面的 ID 与主页上的 ID 进行比较。如果来自 Ajax 请求的 ID 大于页面上的 ID,则它会启动一个函数,该函数启动一个 jquery 弹出窗口以提醒用户有一个新的数据库条目,并为他们提供刷新选项。在 IE 6,7,8 中,弹出窗口永远不会启动,所以我只能想象 ajax 无法正常工作以获取新 ID。刷新功能在我调用它时起作用,这就是为什么我认为问题出在 ajax 上。但如果你好奇,这里是 GoPopUp 函数

var GoPopUp = function(){
            $('#PopNewCall').fadeIn('slow');
            PageRefreshTimer();

        }

        //Function which refreshes page after a certain number of seconds with no user Inputs
        var PageRefreshTimer = function(){
            setTimeout("location.reload(true);",30000); //1,000 = 1 second
        }

        //Function which refreshes page after user has clicked refresh
        var RefreshNow = function(){
            setTimeout("location.reload(true);",0);
        }

【问题讨论】:

  • 它到底在做什么/不做什么?无论如何你可以详细说明细节......
  • 如果 IE 不能在哪个版本中运行?
  • "I got a majority of the following code off the w3schools website, so I don't see why it would be wrong" - 人们应该认真地 promotejs.com 而不是蹩脚的 w3schools
  • 提供一个关于代码失败的模糊概念对您很有用。
  • 据我所知,它在 IE6 -8 中不起作用。基本上这个想法是,ajax 调用一个脚本,该脚本运行一个 php 页面,该页面获取数据库中的最新 ID。然后它将来自 php 页面的 ID 与主页上的 ID 进行比较。如果来自 Ajax 请求的 ID 大于页面上的 ID,那么它会启动一个函数来刷新页面。在 IE 6,7,8 中它不会刷新页面,所以我只能想象 ajax 无法正常工作以获取新 ID。刷新功能在我调用它时起作用,这就是为什么我认为问题出在 ajax

标签: javascript ajax internet-explorer xmlhttprequest


【解决方案1】:

这是一个我喜欢用来跨浏览器获取 XMLHttpRequest 对象的函数。

function getRequestObject() {
    var options = [
        function () { return new XMLHttpRequest() },
        function () { return new ActiveXObject("Microsoft.XMLHTTP") },
        function () { return new ActiveXObject("Msxml2.XMLHTTP.6.0") }
    ];

    for (var i = 0, il = options.length; i < il; i++) {
        try { return options[i]() } catch(e) {}
    }
}

var xhr = getRequestObject();
if (!xhr) { return; } // :(

// use xhr here
xhr.open("GET", "/foo/bar");

【讨论】:

  • 不太确定这对我是否有意义...我将 if 语句放在哪里: if (document.getElementById("lastCallID").innerHTML
  • 嗯,你的问题有点含糊,所以这是我能想到的唯一答案。我的代码在 IE5.5+ 中为您提供了一个 XMLHTTPRequest 对象。就是这样。
【解决方案2】:

对于一个简单的跨浏览器解决方案,我建议使用 jQuery。
jQuery AJAX API 可以在http://api.jquery.com/jQuery.ajax/找到。

【讨论】:

    【解决方案3】:

    我没有在您的代码中看到失败,但是:是否有任何理由不使用现有的伟大框架之一,如 twobirdsjquerymootoolsprototypejs 来执行 ajax-东西?如果您尝试自己编写此代码并支持所有浏览器(或至少支持大型浏览器),您将下地狱并花费大量时间(您可以用来开发或改进其他东西的时间)

    编辑: 作为对您评论的回答:我不知道您到底想做什么,但看起来您正在定期将“getnewid.php”重新发送到“lastCallID” .应该是这样的(不知道 'GoPopUp()' 是干什么用的,在这种情况下只是在每次更新后调用它):

    var refreshInterval = setInterval(function() {
         $('#lastCallID').load('getnewid.php', function(){ GoPopUp(); });
    }, 15000);
    

    【讨论】:

    • 我没有使用 jquery 的原因。如果我使用框架,jquery 将是一个,因为我已经在站点的另一部分使用它。我没有使用 jquery 的主要原因是我在 w3schools 上找到了关于 ajax 的教程,并且我认为它会起作用哈哈......我将如何将我必须的内容转换为 jquery?
    • @Phil:请看我的编辑,我不明白你到底想做什么。
    • .. 我在上面添加了一点背景知识(在我的问题下),Ajax 正在调用 getnewid.php,它运行一个脚本来从数据库中获取新 ID(它定期更新)然后将它最后获得的 ID 与页面中加载的 ID 进行比较。如果页面中最后一个 ID 大于一个,则表示有一个新条目。然后调用 GoPopUp 创建一个小的 jquery 弹出窗口,告诉用户数据库中有一个新条目,并提供刷新页面的选项。
    【解决方案4】:

    编辑:抱歉,我会将此作为对 Catie 回复的评论发布,但作为新用户,我没有足够的“声誉”积分。尽管如此,我相信大多数人都会同意我的评论的有效性。


    @catie,作为开发人员,我们都有 IE 的问题,但老师告诉学生“不要打扰 IE”似乎很奇怪,因为这对你为现实世界做好准备几乎没有作用。

    现实情况是 IE 不会很快消失,在 6/7/8 版本之间,它们仍然拥有超过 50% 的全球市场份额。作为最佳实践,最好确保您的网站/代码在所有浏览器中都能按预期运行,就像@august 解决方案/建议一样。

    【讨论】:

    • 嗨贝塔德。这种东西最好作为评论。
    • 我完全同意。我是 stackoverflow 的新手,看来我只能对自己的帖子发表评论。除非我遗漏了什么,否则我似乎没有能力评论他人。
    【解决方案5】:

    您必须在 IE 上提交作业吗?我们的老师(当我参加相关的类似课程时)要求我们不要打扰 IE,因为很多事情都无法解决。尝试刷新浏览器之类的。

    【讨论】:

    • 是的,它确实需要在 IE 中工作.... ajax 创建页面的一些核心功能
    • 问题是,在课堂作业之外,有时人们希望在 IE 中工作。它很受欢迎。
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多