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