方法在ajax调用中返回null

时间:2014-12-22 05:05:25

标签: javascript jquery ajax json liferay

我正在从数据库中检索数据,使用ajax从数据库中正确地传输数据,问题是我试图将检索到的数据存储在数组中,在下面的代码中return jsonArray变为空。任何人都可以帮助我吗?

function selectEntities(){
    var jsonArray = [];     
    try{            
        var url = '<%=resourceURL%>';
        var A = AUI();                  
        A.io.request(url,
            {
                data: {
                    cmd:'entities',
                },
                dataType:'json',
                method:'post',
                on: {
                    success: function(event, id, obj) {
                        try{
                            var instance = this ;
                            var jsonObject  = instance.get('responseData');
                            var jsonArrayTemp = jsonObject.objJsonArray ;
                            //alert("From the entities: "+jsonArrayTemp);
                            for(var i=0;i < jsonArrayTemp.length ;i++ ){
                                jsonArray.push([jsonArrayTemp[i][0],jsonArrayTemp[i][1]]);
                            }               
                        }catch(exception){
                            //alert(exception);                 
                        }
                    }
                }
            }
        );
    }catch(exception){
        //alert(exception);     
    }   
return jsonArray ;
}

1 个答案:

答案 0 :(得分:2)

A.io.request是一个异步函数。由于函数需要一些时间来执行,单线程javascripts会继续执行下面的代码到该函数,并继续做其他工作,直到响应到来。在响应到来并将结果推送到数组时,该函数已经执行并返回。

作为一种解决方案,您可以在成功回调函数中添加处理返回数组的代码,而不必尝试返回..

function selectEntities(callback){
     ..............
     success: function(event, id, obj) {
                    try{
                        var instance = this ;
                        var jsonObject  = instance.get('responseData');
                        var jsonArrayTemp = jsonObject.objJsonArray ;
                        //alert("From the entities: "+jsonArrayTemp);
                        for(var i=0;i < jsonArrayTemp.length ;i++ ){
                            jsonArray.push([jsonArrayTemp[i][0],jsonArrayTemp[i][1]]);
                        } 
                        callback(jsonArray); // calling the callback function             
                    }catch(exception){
                        //alert(exception);                 
                    }
                }
  ...........
}

然后定义回调函数并调用..

var callback = function (jsonArray) {
        alert(jsonArray);  //code to handle jsonArray
    }
selectEntities(callback);