Javascript 方法在ajax调用中返回null

Javascript 方法在ajax调用中返回null,javascript,jquery,ajax,json,liferay,Javascript,Jquery,Ajax,Json,Liferay,我正在从数据库中检索数据,数据是使用ajax正确地从数据库中获取的,问题是我试图将检索到的数据存储在一个数组中,在下面的代码return jsonArray中,数据正在变为null。有人能帮我吗 function selectEntities(){ var jsonArray = []; try{ var url = '<%=resourceURL%>'; var A = AUI();

我正在从数据库中检索数据,数据是使用ajax正确地从数据库中获取的,问题是我试图将检索到的数据存储在一个数组中,在下面的代码
return jsonArray
中,数据正在变为null。有人能帮我吗

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 ;
}
函数selectEntities(){
var jsonArray=[];
试试{
var url='';
var A=AUI();
A.io.请求(url,
{
数据:{
cmd:“实体”,
},
数据类型:'json',
方法:'post',
关于:{
成功:功能(事件、id、obj){
试一试{
var实例=这个;
var jsonObject=instance.get('responseData');
var jsonArrayTemp=jsonObject.objJsonArray;
//警报(“来自实体:+jsonArrayTemp”);
对于(var i=0;i
A.io.request
是一个异步函数。由于函数需要一些时间来执行,单线程javascripts会继续执行下面的代码,直到响应到来为止。当响应到来并将结果推送到数组时,函数已经执行并返回

作为一种解决方案,您可以在success回调函数中添加处理返回数组的代码,而无需尝试返回

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);                 
                    }
                }
  ...........
}

您检查过ajax调用的返回值吗?entitiesJsonObject:…{“objJsonArray”:[[1,“用户”],[2,“课程”],[3,“组织”]}这是实际从数据库获取的数据。当我打印jsonArrayTemp时,以下数据显示1、用户、2、课程、3、组织可能与我删除的returns语句重复,它显示的是undefinedWhat
selectRoles()
?它是否完全像
selectEntities()
function?var entities=selectEntities();警报(角色);您不能在这里使用退货。您必须了解Java脚本的异步行为。。。您可以做的是将函数传递给
selectEntities
以处理jsonArray,而不是返回。。我编辑了代码来解释更多我的意思..我做了你说过的:(但不起作用,请看我的JSP这里。。
var callback = function (jsonArray) {
        alert(jsonArray);  //code to handle jsonArray
    }
selectEntities(callback);