从AJAX函数中修改外部变量?

时间:2013-08-31 22:37:40

标签: 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;
}

1 个答案:

答案 0 :(得分:1)

你可以用两种方式做到......

向您发送回调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并且对用户体验不利。