ajax done 不执行,jquery when.apply()。done等待一个ajax调用,但不是另一个?

我有一个.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值