我正在运行一个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);
},
答案 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
希望这有帮助