我试图在加载数据后返回一个回调值,我可能会看到这一切都错了。
var loadFromDatabase = function(callback){
if (!obj.data.myarray) {
// the problem is here, the jquery obj returns the ajax request obj
return $.getJSON('http://validjson',function(data){
obj.data.myarray = data.myarray;
return callback();
});
} else {
return callback();
}
};
var findObjInArray = function(){
// need i to be returned, but isnt working in the if statement, but works in the else statement
return loadFromDatabase(function(){
var l = obj.data.myarray.length;
for (var i = 0; i < 50;i++) {
if (i === 30) {
return i;
}
}
});
};
var myval = findObjInArray();
console.log(myval);
答案 0 :(得分:2)
应该只是:
return callback;
执行return callback()执行回调函数并返回其返回值。
答案 1 :(得分:2)
Ajax是异步(因此名称)。你不能从中归还任何东西。
getJSON方法导致发送HTTP请求。当请求得到应答时,将在事件上调用您传递的函数。它没有与调用函数的链接。
您必须编写该功能以执行您想要对数据本身执行的操作。您无法传回数据并在调用函数中处理它。
答案 2 :(得分:0)
你必须再使用一个回调函数:
var loadFromDatabase = function(callback){
if (!obj.data.myarray) {
// the problem is here, the jquery obj returns the ajax request obj
return $.getJSON('http://validjson',function(data){
return callback(data.myarray);
});
} else {
return callback();
}
};
var findObjInArray = function( callback ){
// need i to be returned, but isnt working in the if statement, but works in the else statement
return loadFromDatabase(function( myarray ){
var l = myarray.length;
for (var i = 0; i < 50;i++) {
if (i === 30) {
return callback ( i );
}
}
});
};
findObjInArray(
function ( myval )
{
console.log(myval);
}
);
答案 3 :(得分:0)
问题是Ajax回调是异步调用的。这意味着loadFromDatabase函数首先返回,然后调用回调。因此,不可能从回调中返回某些东西。
您可以使用异步Ajax选项使调用异步,但我不建议这样做。您需要考虑Ajax的异步特性来重新审视您的体系结构。