Php 是否从AJAX函数中修改外部变量?
我使用AJAX请求从数据库中获取数值。AJAX函数位于另一个函数中,该函数应返回AJAX请求的值。但是,由于AJAX请求的返回值是xmlhttp.onreadystatechange函数中的一个局部变量,因此它不会更改return\u count函数的“更高级别”temp\u返回。我无法让“lower”函数返回值并将其分配给变量,因为它已定义为xmlhttp.onreadystatechange。。。如何更改此值,使return_count函数返回正确的值,而不是42(为测试目的而预定义)Php 是否从AJAX函数中修改外部变量?,php,javascript,jquery,ajax,function,Php,Javascript,Jquery,Ajax,Function,我使用AJAX请求从数据库中获取数值。AJAX函数位于另一个函数中,该函数应返回AJAX请求的值。但是,由于AJAX请求的返回值是xmlhttp.onreadystatechange函数中的一个局部变量,因此它不会更改return\u count函数的“更高级别”temp\u返回。我无法让“lower”函数返回值并将其分配给变量,因为它已定义为xmlhttp.onreadystatechange。。。如何更改此值,使return_count函数返回正确的值,而不是42(为测试目的而预定义) 你可
你可以用两种方法来做 对您进行回调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”添加到标记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;
}
但是这种方法会锁定你的用户界面,对用户体验不好。你可以用两种方法来实现 对您进行回调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”添加到标记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;
}
但是这种方法会锁定用户界面,对用户体验不利。发出ajax请求,如果不想阻止页面,则需要调用函数而不是返回。ajax中的A代表异步,不能从ajax调用中返回变量,需要通过回调函数(通常作为ajax的参数传递)来使用它“major”函数),该函数只有一个参数(返回的数据,在本例中为
xmlhttp.responseText
)并将使用该参数调用。的可能重复项似乎我需要提高我的搜索技能,我的第一次搜索没有显示任何可以轻松应用于我的特定问题的结果。感谢您为我指出其他问题/答案。提出ajax请求,如果不想阻止页面,您需要调用函数启用而不是返回。AJAX中的A代表异步,您不能从AJAX调用返回变量,您需要通过回调函数(通常作为AJAX“major”函数的参数传递)使用它,该函数只有一个参数(返回的数据,在本例中为xmlhttp.responseText
)并将使用该参数调用。的可能重复项似乎我需要提高一下搜索技能,我的第一次搜索没有显示任何可以轻松应用于我的特定问题的结果。感谢您为我指出其他问题/答案。