开发者

Ajax not working in firefox without alert

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

This code is working fine for IE, Safari and Firefox, but if I remove the alert, then the code will not work in Firefox, though it still works in IE and Safari.

Can anybody give me suggestion why it not working in Firefox without alert?


EDIT: Code that adds a row:

if (window.XMLHttpRequest && browserVersion.indexOf("Microsoft") == -1 ) {
    // code for Firefox, Chrome, Opera, Safari
    req = new XMLHttpRequest("");
    if (req) {
        ajaxProcessed = false;
        req.onreadyst开发者_如何学JAVAatechange = processAjaxStateChangeForRowAdd;
        req.open("POST", url, true);
        req.send();
        // alert("1");
    }
}


The alert is blocking. What this means is that your script is temporarily suspended (even if it's for a few milliseconds). During this time, your AJAX request completes and your req object is being set. You can add a delay (using setTimeout) to your callback to verify this.

I would suggest you post more of your script so that we can help you set up your callback properly. Alternatively, use a library such as jQuery to set up AJAX calls in a cross-browser manner easily.


EDIT: You need to either declare req as a global variable, or use an anonymous function. The following code demonstrates the first method (using a global variable):

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


    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;
}


can you try this:

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


You should also check for the readyState , the following code might help

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

Read this for the different values of readyState

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜