1

AJAX リクエストを使用して、データベースから数値を取得します。AJAX 関数は、AJAX 要求の値を返す必要がある別の関数内にあります。ただし、AJAX 要求からの戻り値は xmlhttp.onreadystatechange 関数内のローカル変数であるため、return_count 関数の「上位レベル」の temp_return は変更されません。xmlhttp.onreadystatechange に既に定義されているため、"lower" 関数に値を返して変数に代入させることはできません... 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;
}
4

1 に答える 1

1

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;
}

しかし、この方法は UI をロックし、UX に悪影響を及ぼします。

于 2013-08-31T23:07:15.237 に答える