1

这是我从远程服务器获取请求的数据的功能。一切都很好,但只有一件事。

function get_users_request()
    {
        var result = [];
        var idx=0;
        $.get("getUsers_actions.php",
            function(data) {
                for (var key in data)
                {
                    result[idx++]=data[key];
                    console.log(data[key].login);
                }
            },
            "json");
            return result;
    }

输出是:

hissou
hbadri
user_1

但是当我尝试得到get_users_request()结果时,会给出一个空数组[]

4

3 回答 3

1

由于是异步调用,调用函数时需要使用回调:

function get_users_request(callback)
{
    $.get("getUsers_actions.php", callback,"json");
}

get_user_request(function(data){

    //var result = [];
    //var idx=0;

    //for (var key in data)
    //{
    //     result[idx++]=data[key];
    //     console.log(data[key].login);
    //}

    $.each(data, function(k, v){
        console.log(v.login);
    });

});

要理解上面的代码,您可以使用超时模拟 ajax 调用:

var myAjaxResult;

setTimeout(function(){

    myAjaxResult = 1; // try to update the value

}, 1000 /* simulates a 1 second ajax call */);

console.log(myAjaxResult); //undefined

由于console.log(myAjaxResult);没有包含在回调中,它将立即被调用,因此仍然是未定义的。

如果我们至少等待一秒钟,则该值将被设置。但是,我们可以创建一个回调函数并准确地知道它何时完成,而不是假设调用完成的时间:

function myFunc(callback){

    setTimeout(function(){
        callback(1 /* returns the value 1 to the callback */);
    }, 1000 /* simulates a 1 second ajax call */);

}

myFunc(function(callbackData){ //call the function using 
                               //the callback we just specified
    console.log(callbackData);
});

希望这可以帮助!如果有任何不清楚的地方,请告诉我。

于 2013-08-14T08:35:40.670 回答
0

这就是可以给出结果的东西。

 function get_users_request(s)
        {
            var s =new Array(), idx=0;
            $.ajax({
                url: "getUsers_actions.php",
                success: function(data){
                    $.each(data, function(k, v){
                        s[idx++] = v.login;
                        console.log(v.login);
                    })
                    },
                dataType: "json"
            });
            console.log(s);
        }
于 2013-08-14T10:53:40.873 回答
-1

你应该放在循环return result;之后。for返回应该在 $.get 调用完成后完成。现在在哪里,在 $.get 调用 STARTS 之后立即访问返回

于 2013-08-14T08:39:47.560 回答