好吧,我知道这样的问题可能已被问了好几次,但我似乎找不到适合我项目的解决方案。最近,在使用jQuery进行大量的AJAX调用时,我发现自己处于一种回调地狱的形式。 jQuery对于这个项目是否过于强大,超出了这个问题的范围。所以基本上这里有一些代码可以显示正在发生的事情:
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从另一个函数传递给它,而不是加载它。我也已经在那里加载了它,所以最好不要继续反复加载同一个文件。我只是担心内存过载。但是,这些文件并不是非常庞大,所以我想这可能还不错。
答案 0 :(得分:1)
Ajax调用完成后,将运行$ .getJSON调用中的内联函数。在你的(回调)功能中做你的工作。
答案 1 :(得分:0)
您的check_form
函数应该接受回调,以便稍后提供信息时执行。
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
}
});