方法在 AJAX 调用中返回 null

method returns null in ajax call

本文关键字:返回 null 调用 AJAX 方法      更新时间:2023-09-26

我正在从数据库中检索数据,数据使用 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 ;
}

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