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

在第一个控制台日志中,我searchResultsCoutner的值很好,在第二个日志中,它变成了 0。为什么会这样?

4

2 回答 2

5

ajax 请求是异步执行的,因此success尝试更改变量的回调函数将在稍后执行。

您的函数只返回 0。您必须重写代码以使其以异步方式工作。一种方法是将回调函数searchPerson作为参数传递。

于 2013-07-27T12:01:39.670 回答
1

从 searchPerson() 函数返回 promise 接口 ($.ajax) 并在 deferred 解决后使用返回的结果:

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 回答