0

私はこのjQuery関数を持っています:

var searchResultsCounter = 0;
function searchPerson(filterText){
    //code
    $.ajax({
        type: "GET",
        dataType:"json",
        url: "res/main.php",
        data: { command : "loadPeople",
                filter: filterText },
        success: function( people ){
            for(var i = 0; i< people.length; i++){
                //code  
            }   
            searchResultsCounter = people.length;
            console.log(searchResultsCounter);  
        }
    }); 
console.log(searchResultsCounter);
return searchResultsCounter;
}

最初のコンソール ログでは、mysearchResultsCoutnerは適切な値を示していますが、2 番目のログでは 0 になっています。これはなぜですか?

4

2 に答える 2

5

ajaxリクエストは非同期で実行されるsuccessため、変数を変更しようとするコールバック関数は後で実行されます。

関数は単に 0 を返します。非同期で動作するようにコードを書き直す必要があります。1 つの方法は、コールバック関数をsearchPersonパラメーターとして渡すことです。

于 2013-07-27T12:01:39.670 に答える
1

searchPerson() 関数から promise インターフェイス ($.ajax) を返し、遅延が解決されたら返された結果を使用します。

function searchPerson(filterText) {
    //code
    return $.ajax({
        type: "GET",
        dataType: "json",
        url: "res/main.php",
        data: {
            command: "loadPeople",
            filter: filterText
        }
    });
}

$.when(searchPerson(filterText)).done(function (data) { 
    /*SUCCESS*/
});
于 2013-07-27T12:08:14.743 に答える