如何使用ajax / jquery从GET方法中恢复数据

时间:2013-08-14 08:31:15

标签: php jquery ajax

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

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()结果时,会给出一个空数组[]

3 个答案:

答案 0 :(得分: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);
});

希望这有帮助!如果有什么不清楚,请告诉我。

答案 1 :(得分: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);
        }

答案 2 :(得分:-1)

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