控件跳过ajax对象onreadystatechange函数。 为什么?

I'm new to web-development. Created a signup page making some asynchronous calls to php. Ran debugging found the control skips the onreadystatechange function completely. Please help...

    var ajax = ajaxObj("POST", "signup.php");      //defines the ajax object, definition is below
    ajax.onreadystatechange = function () {        //doesn't run after this line
        if(ajaxReturn(ajax) == true) {
            if(ajax.responseText != "signup_success"){
                status.innerHTML = ajax.responseText;
                _("signupbtn").style.display = "block";
            } else {
                window.scrollTo(0,0);
                _("signupform").innerHTML = "OK "+u+", check your email inbox and junk mail box
                  at <u>"+e+"</u> in a moment to complete the sign up process.";
            }
        }
    }
    ajax.send("u="+u+"&e="+e+"&p="+p1+"&c="+c+"&g="+g);      //control reaches here directly
}
}// control exits here

The ajax object is created externally here..

function ajaxObj( meth, url ) {
var x = new XMLHttpRequest();
x.open( meth, url, true );
x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
return x;
}

function ajaxReturn(x){
  if(x.readyState == 4 && x.status == 200){
    return true;    
  }
}

This is because it's an event callback function and it will be called when server responds to your ajax request. If you're using firefox press F12, switch to network tab and check html and xhr to see it's status.

Because it is asynchronous so the function won't be called as you step through the code in a linear fashion.

It gets called by native code when the ready state changes.

Stick a breakpoint inside the function if you want to debug it.