Javascript 函数在XMLHttpRequest之后返回
好吧,我知道像这样的问题可能已经被问了几十次了,但我似乎找不到一个适合我的项目的有效解决方案。最近,在使用jQuery进行大量AJAX调用时,我发现自己陷入了一种回调地狱的形式。jQuery对于这个项目是否太强大超出了这个问题的范围。基本上这里有一些代码显示了发生了什么:Javascript 函数在XMLHttpRequest之后返回,javascript,jquery,xmlhttprequest,Javascript,Jquery,Xmlhttprequest,好吧,我知道像这样的问题可能已经被问了几十次了,但我似乎找不到一个适合我的项目的有效解决方案。最近,在使用jQuery进行大量AJAX调用时,我发现自己陷入了一种回调地狱的形式。jQuery对于这个项目是否太强大超出了这个问题的范围。基本上这里有一些代码显示了发生了什么: function check_form(table) { var file = "/models/"+table+".json"; var errs = {}; var xhr = $.getJSON(file,
function check_form(table)
{
var file = "/models/"+table+".json";
var errs = {};
var xhr = $.getJSON(file, function(json)
{
for (key in json)
{
var k = key;
var r = json[k];
$.extend(errs, check_item("#"+k,r));
}
});
return errs;
}
而且。。。正如你可能猜到的,我得到了一个返回的空对象。我最初的想法是使用某种onReadyStateChange
想法,只要readyState
最终达到4,就会返回这个想法。但这会导致我的应用程序无限期挂起。我需要这些错误来决定是否允许提交表单(以及告诉用户应用程序中的错误所在)。有什么想法吗
编辑。这不是最漂亮的解决方案,但我已经设法让它工作起来了。基本上,check_form将json从另一个函数传递给它,而不是加载它。我也已经在那里加载了它,所以可能最好不要继续一遍又一遍地加载同一个文件。我只是担心重载内存。不过,这些文件不是绝对大的,所以我想这可能没问题。在Ajax调用完成后,$.getJSON调用中的内联函数将运行。请在其中执行您的工作(回调)函数。您的
检查表单
函数应接受回调,以便在以后信息可用时执行
function check_form(table, callback)
{
var file = "/models/"+table+".json";
var xhr = $.getJSON(file, function(json)
{
var errs = {};
for (key in json)
{
var k = key;
var r = json[k];
$.extend(errs, check_item("#"+k,r));
}
callback(errs);
});
}
然后,让check_form的呼叫者提供回调:
var table = getSomeTable();
check_form(table, function(errs)
{
for (var key in errs)
{
var value = errs[k];
// do something with key/value pair
}
});
这将起作用,除了我最终必须将true或false返回给submit处理程序。check_form由另一个返回
return(countProps(errs)==0)的函数调用?true:false;
需要从这个函数中提供数据,除非我完全遗漏了什么。你不能这样做,因为JavaScript本质上是事件驱动的。没有睡眠/等待函数,所以你不能暂停当前运行的代码。你应该试着重新思考逻辑。嗯,我看看我能想出什么我想我需要用一个不同的想法回到绘图板上。这个想法似乎也很有效。:P