遇到ASYNC AJAX CALLBACK问题

时间:2015-01-08 20:42:36

标签: javascript ajax asynchronous callback

关于异步回调,关于SO的帖子大约有一百万,但我无法弄清楚如何让我的工作

我有一个AJAX请求:

function checkName();
    var ajax = new XMLHttpRequest();
    ajax.open("POST", "index.php", true); // true = async
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    ajax.onreadystatechange = function(){
        if(ajax.readyState == 4 && ajax.status == 200){
            var pass = ajax.responseText + 0;
        }
    }

    ajax.send("emailcheck="+email);

return pass;
}

pass的唯一可能结果是1或0。

我已经尝试在pass分配后立即移动返回,但仍然没有。那时我开始四处寻找并发现回调,但我无法弄清楚如何去做。

我想做的是:

if(checkName()){
    // Do stuff
}else{}

我不想做同步ajax请求(即第三个参数的false),因为这会停止我拥有的动画并且还会阻止用户在网站上执行其他任务通话的时间。

我知道这与关于该主题的其他帖子非常相似,我只是无法弄明白。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

只有同步通话才能实现。没人会想要那个。你是自己说的。

if(checkName()){ 
     // Do stuff
}else{}

您确实需要使用回调函数。见这个例子:

function checkName(callBack) {
    var ajax = new XMLHttpRequest();
    ajax.open("POST", "index.php", true); // true = async

    if (callBack)
    {
       ajax.callBack = callBack;
    }
    ajax.onreadystatechange = function(){
        if(this.readyState == 4 && this.status == 200){
            if (this.callBack)
            {
                this.callBack(this.responseText);
            }
        }
    }

    ajax.send("emailcheck="+email);

}

function checkNameFinish(data)
{
    alert(data);
}

checkName(checkNameFinish);

checkName现在接受参数callBack。这必须是一个功能。当readystate完成时,它会检查是否设置了callBack。如果是,则执行callBack function并将响应作为参数传递。