ajax不在IE中工作

时间:2010-11-02 14:27:51

标签: javascript ajax internet-explorer xmlhttprequest

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

5 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

我没有看到代码中的失败,但是:有没有理由不使用其中一个优秀的现有框架,例如twobirdsjquerymootools或{ {3}}做ajax-stuff?如果你试图自己写这个,支持所有浏览器(或至少是大的浏览器),你将会陷入困境并花费大量时间(可以用来开发或改进其他东西的时间)

编辑:作为您评论的答案:我不知道您正在尝试做什么,但看起来您定期将'getnewid.php'重新命名为'lastCallID' 。它会是这样的(不知道'GoPopUp()'是什么,只是在这种情况下每次更新后调用它):

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

答案 2 :(得分:0)

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


@catie,作为开发人员,我们都有IE的问题,但教师指导学生“不要乱用IE”似乎很奇怪,因为这对于为现实世界做好准备没什么作用。

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

答案 3 :(得分:0)

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

找到jQuery AJAX API

答案 4 :(得分:-2)

您是否必须在IE上提交作业?我们的老师(当我参加相关的类似课程时)要求我们不要理会IE,因为很多事情都不起作用。尝试刷新浏览器或其他内容。