[英]Modify outside variable from within AJAX function?
我使用AJAX請求從數據庫中獲取數值。 AJAX函數位於另一個應返回AJAX請求值的函數內部。 但是,由於AJAX請求的返回值是xmlhttp.onreadystatechange函數內部的局部變量,因此它不會更改return_count函數的“更高級別” temp_return。 我不能讓“低級”函數返回值並將其分配給變量,因為它已經定義為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;
}
您可以通過2種方式完成此操作...
向您回調ajax(推薦)
創建異步回調以繼續您的流程; 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”以標記異步...
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;
}
但是這種方法會鎖定您的用戶界面,對UX不利。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.