2

我有一个从 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 的东西,但返回它什么也不返回。

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

有任何想法吗?

4

3 回答 3

6

您使用Ajax不正确,我们的想法是不要拥有return任何东西,而是将数据交给一个称为callback函数的东西,该函数处理数据。

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提交处理程序中的任何内容都不会执行任何操作,您必须转而交出数据,或者直接在成功函数中执行您想要的操作。

于 2012-07-31T04:05:12.683 回答
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);
    }
}
于 2012-07-31T04:05:57.790 回答
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;
}
于 2012-07-31T05:13:18.740 回答