返回javascript数组不起作用

时间:2012-07-31 04:01:14

标签: javascript function multidimensional-array return

我有一个从PHP中获取一些JSON的javascript函数。当我得到JSON时,我的计划是解析它并将其加载到数组中然后返回该数组,以便我可以在任何地方使用数据。

这是ajax函数:

function get_ajax(route_val){

$.ajax({
            url: "ajax.php",
            dataType: 'json',
            data: { 
                route: route_val
        },
            success: function(result) {
                if(result.error == true){
                    alert(result.message);
                }else{

                    $.each(result, function(key1, value1){

                        //console.log(key1 + ":" + value1);

                        returnarray[key1] = value1;

                    });             

                    return returnarray;
                }

            }
        });


}
</script>

如果我然后尝试定义say var arr = get_ajax('1'),则arr将为空。我可以从函数内部从数组中发出警报和console.log内容,但返回它什么都不返回。

它似乎不存在于函数之外。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

您错误地使用Ajax,其想法不是让它return,而是将数据移交给处理数据的callback函数。< / p>

IE:

function handleData( responseData ) {
    // do what you want with the data
    console.log(responseData);
}

$.ajax({
    url: "hi.php",
    ...
    success: function ( data, status, XHR ) {
        handleData(data);
    }
});

return提交处理程序中的任何内容都不会执行任何操作,您必须切换数据,或者直接在成功函数内执行您想要的操作。

答案 1 :(得分:3)

问题是你的成功函数没有将你的数组返回到任何地方。您需要做的是在成功处理程序内部完全处理您的数据,或者调用另一个方法/函数来执行所需的操作。

假设它可能看起来像这样:

success: function(result) {
    if(result.error == true){
        alert(result.message);
    }else{
        $.each(result, function(key1, value1){
            returnarray[key1] = value1;
        });
        //Something like this  
        ajaxHandlers.handleReturnedArray(returnarray);
    }
}

答案 2 :(得分:0)

如果你绝对想让它返回某些东西,你可以做同步请求(尽管它不是AJAX(异步 JavaScript和XML))。

function get_ajax(route_val){

    var returnarray = [];

    $.ajax({
        url: "ajax.php",
        dataType: 'json',
        async: false,
        data: { 
            route: route_val
    },
        success: function(result) {
            if(result.error == true){
                alert(result.message);
            }else{

                $.each(result, function(key1, value1){
                    returnarray[key1] = value1;

                });             

            }
        }
    });

    return returnarray;
}