我有一个.each函数,其中每个“每个”都是ajax调用。我需要等到他们完成之后再继续进行另一次ajax调用。我正在使用找到的解决方案here。疯狂的事情是,一旦我在最终功能中更改了Ajax调用的URL,它就停止工作;该函数不会等待所有ajax调用完成。jquery when.apply()。done等待一个ajax调用,但不是另一个?
var iarr=[];
$.getJSON("http://dbpedia.org/sparql?default-graph-uri=blablbla-get several-links", {},
function (data) { //links returned through json
var def = [];
$.each(data.results.bindings, function() {
var tlink = this.link.value;
def.push(getmeta(tlink)); //get the meta values for each link
});
$.when.apply($, def).done(postmetas());
});
的getmeta功能如下:
function getmeta(lnk){
var dfd=$.Deferred();
$.ajax({
url: "meta.php",
type: "POST",
data: {url: lnk},
dataType: "json",
async: true,
success: function (r) {
if (r !==null){
iarr.push({
"title": r.title,
"desc": r.desc,
"url": r.url
});
dfd.resolve();
}
}
});
return dfd.promise();
}
最后,postmetas功能,这不应该叫,直到所有的getmeta的完成:
function postmetas(){
$.ajax({ //
url: "meta.php",
type: "POST",
data: {url: wik},
dataType: "json",
success: function (r) {
iarr.push({
"title": r.title,
"desc": r.desc,
"url": r.url
});
console.log(iarr);
}
});
}
}
这个伟大的工程,并且在所有的ajax调用完成之后,日志给了我iarr数组中的所有值。
这是事情:当我将postmetas函数更改为以下内容时,整个事件停止工作,postmetas在所有“getmeta”完成之前被调用。任何人都可以找出原因吗?
function postmetas() {
$.ajax({
url: "http://dbpedia.org/sparql?default-graph-uri=blabla-some-text",
dataType: "json",
success: function (r) {
var descr = r.results.bindings[0].abstract.value;
var subtitle = descr.substr(0, descr.indexOf('. '));
iarr.push({
"title": wtitle, //wtitle is a variable we established before
"desc": subtitle,
"url": wurl //wurl is a variable we established before
});
console.log(iarr);
}
});
}
2013-01-01
Phil