没有警报,Ajax无法在Firefox中工作

时间:2011-01-25 12:16:53

标签: javascript html ajax firefox

function processAjaxStateChangeForRowAdd() {
    alert(0);
    if (req.readyState == 4) { // Complete
        if (req.status == 200) { // OK response
            processForRowAdd(req.responseText);
        } else {
            alert("Problem: " + req.statusText);
        }
    }
}

此代码适用于IE,Safari和Firefox,但如果删除alert,则代码将无法在Firefox中运行,但仍可在IE和Safari中使用。

有人可以给我一些建议吗?为什么它在没有警报的情况下无法在Firefox中运行?


编辑:添加一行的代码:

if (window.XMLHttpRequest && browserVersion.indexOf("Microsoft") == -1 ) {
    // code for Firefox, Chrome, Opera, Safari
    req = new XMLHttpRequest("");
    if (req) {
        ajaxProcessed = false;
        req.onreadystatechange = processAjaxStateChangeForRowAdd;
        req.open("POST", url, true);
        req.send();
        // alert("1");
    }
}

4 个答案:

答案 0 :(得分:3)

alert正在阻止。这意味着您的脚本暂时被暂停(即使它只有几毫秒)。在此期间,您的AJAX请求完成,并且您的req对象正在设置中。您可以在回调中添加延迟(使用setTimeout)来验证这一点。

我建议您发布更多脚本,以便我们可以帮助您正确设置回调。或者,使用诸如jQuery之类的库来轻松地以跨浏览器方式设置AJAX调用。


编辑:您需要将req声明为全局变量,或使用匿名函数。以下代码演示了第一种方法(使用全局变量):

var req;
if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    if (req) {
        req.onreadystatechange = processAjaxStateChangeForRowAdd;
        req.open("POST", url, true);
        req.send();
    }
}

function processAjaxStateChangeForRowAdd() {
    if (req.readyState == 4) { // Complete
        if (req.status == 200) { // OK response
            processForRowAdd(req.responseText);
        } else {
            alert("Problem: " + req.statusText);
        }
    }
}

答案 1 :(得分:1)

    function getHttp()
    {
       var xmlhttp;
      try
      {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(e)
      {
        try
        {
              xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
            if(typeof XMLHttpRequest != 'undefiend')
            {
            xmlhttp = new XMLHttpRequest();
            }
        }
    }
     return xmlhttp;
}

答案 2 :(得分:0)

你可以试试这个:

 if (request.readyState == 4) {
   if (request.status == 200) {
     var response = request.responseText;
   } else
     alert("status: " + request.status);
 }

答案 3 :(得分:0)

您还应检查readyState,以下代码可能有帮助

req.onreadystatechange=function()
    {
        if (req.readyState==4 && req.status==200)
        {
            processForRowAdd(req.responseText)
        }
}

读取this以获取readyState

的不同值