我使用AJAX请求从数据库中获取一个数值。AJAX函数位于另一个函数内部,该函数应返回AJAX请求的值。但是,由于AJAX请求的返回值是xmlhttp.onreadystatechange函数内的局部变量,因此它不会更改return_count函数的"更高级别"temp_return。我不能让"lower"函数返回值并将其分配给一个变量,因为它已经定义为xmlhttp.onreadystatechange…我如何更改它,使return_count函数返回正确的值,而不是42(为测试目的预定义)?
function return_count(ajax_userid,ajax_date,ajax_KT,ajax_KS)
{
var temp_return = 42;
xmlhttp.onreadystatechange =
function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
temp_return = xmlhttp.responseText;
}
}
xmlhttp.open("GET", "count.php?userid="+ajax_userid+"&date="+ajax_date+"&KT="+ajax_KT+"&KS="+ajax_KS, true);
xmlhttp.send();
return temp_return;
}
你可以用两种方法。。。
向您回调ajax(RECOMENDED)
创建异步回调以继续您的流;D
function return_count(ajax_userid,ajax_date,ajax_KT,ajax_KS, callback)
{
var otherCallback;
var temp_return = 42;
xmlhttp.onreadystatechange =
function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
temp_return = xmlhttp.responseText;
if(typeof callback === "function" ) callback(temp_return);
if(typeof otherCallback === "function" ) otherCallback(temp_return);
}
}
xmlhttp.open("GET", "count.php?userid="+ajax_userid+"&date="+ajax_date+"&KT="+ajax_KT+"&KS="+ajax_KS, true);
xmlhttp.send();
return { done: function (callback2){
otherCallback = callback2;
} };
}
你可以像下面这样使用。。。
参数回调
return_count( userid, date, KT, KS, function (count) {
alert("returned " + count);
});
或管道回调
return_count( userid, date, KT, KS)
.done( function (count) {
alert("returned " + count);
});
制作同步ajax
正在添加"false"以标记async。。。
function return_count(ajax_userid,ajax_date,ajax_KT,ajax_KS)
{
var temp_return = 42;
xmlhttp.onreadystatechange =
function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
temp_return = xmlhttp.responseText;
}
}
xmlhttp.open("GET", "count.php?userid="+ajax_userid+"&date="+ajax_date+"&KT="+ajax_KT+"&KS="+ajax_KS, false);
xmlhttp.send();
return temp_return;
}
但这种方法会锁定用户界面,对用户体验不利。