在ajax请求更改之前,函数会提供值

时间:2014-03-08 14:20:33

标签: javascript oop global-variables

我正在运行一个ajax请求,根据“check_answer_status.php”文件中的一些mysql代码检索值0,1或2。出于测试目的,我已经包含警报以检查一般的ajax和mysql请求是否正常工作,因此警报时“Questiions.answerStatus”中包含的值是正确的。但是,我的问题是函数“checkAnswerStatus”已经执行并且没有改变“answerStatus”的初始值(为了测试目的我设置为50)。

上下文:稍后在代码中我想执行依赖于变量“answerStatus”的值的代码。

我相信我需要以某种方式包含类似“不完整”或类似的东西,但我不知道该怎么做。谁能帮我吗?非常感谢!

var = Questions = {

answerStatus:50,

checkAnswerStatus : function(question){
    var xmlhttp;
    if (window.XMLHttpRequest){
         xmlhttp=new XMLHttpRequest();
    }
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            test = xmlhttp.responseText;
            Questions.answerStatus = test;
            alert(Questions.answerStatus);
        }
    }
    xmlhttp.open("POST","../../include/check_answer_status.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("q="+question);
},

2 个答案:

答案 0 :(得分:0)

您发出的请求是asynchronus(xmlhttp.open函数的第三个参数)。如果您将其更改为:

xmlhttp.open("POST","../../include/check_answer_status.php",false);

它应该有用。

另一个选择是将回调传递给checkAnswerStatus函数,并在请求完成时调用回调。例如:

checkAnswerStatus : function(question, callback){
    var xmlhttp;
    if (window.XMLHttpRequest){
         xmlhttp=new XMLHttpRequest();
    }
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            test = xmlhttp.responseText;
            Questions.answerStatus = test;
            callback(Questions.answerStatus); //call the function
        }
    }
    xmlhttp.open("POST","../../include/check_answer_status.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("q="+question);
}

然后你会调用这样的函数:

Questions.checkAnswerStatus("bla bla", function(answerStatus) {
   alert(answerStatus);
});

答案 1 :(得分:0)

除了Nemos的回答,我建议您阅读以下来自MDN的资源:

更多技术API文档,简要概述了所有可能性: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

更多现实生活中的用例: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

希望这有帮助