php - 从 AJAX 函数内修改外部变量?

标签 php javascript jquery ajax function

我使用 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 进行回调(推荐)

创建异步回调以继续您的流程;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;
}

但是这种方法会锁定你的 UI 并且对 UX 不利。

关于php - 从 AJAX 函数内修改外部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553450/

相关文章:

Javascript 多维数组/哈希表

javascript - jQuery.post() 动态生成数据到服务器返回空响应

javascript - 创建上一页按钮

java - 将 json 字符串转换为 json 数组 - android java

PHP 搜索数组速度

Javascript 映射嵌套元素

javascript - Jquery CSS-嵌套<li> 4层深度调用父级

javascript - 如何通过 jQuery AJAX 更新值

javascript - 在设备准备好之前运行的 jquery 移动功能

javascript - 脚本不执行附加数据,但执行表单内的预写 html 代码,脚本也已加载到页面顶部