簡體   English   中英

從AJAX函數內部修改外部變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM