【发布时间】:2014-07-19 17:34:42
【问题描述】:
我有两个函数,名字是Function3,Function4,Function3会通过ajax发送请求到服务器端获取jsondata,但是大概需要3秒左右才能完成。 Function4 是一个普通函数,它会等待 Function3 的结果然后执行。 我的代码如下:
function ajaxRequest(container)
{
$.ajax({
url: "Home/GetResult",
type: "post",
success: function (data) {
container.append(data.message);
}
});
}
var eventable = {
on: function (event, cb) {
$(this).on(event, cb);
},
trigger: function (event) {
$(this).trigger(event);
}
}
var Function3 = {
run: function () {
var self = this;
setTimeout(function () {
ajaxRequest($(".container1"));
self.trigger('done');
}, 500);
}
}
var Function4 = {
run: function () {
var self = this;
setTimeout(function () {
$(".container1").append("Function4 complete");
self.trigger('done');
},500);
}
}
$.extend(Function3, eventable);
$.extend(Function4, eventable);
Function3.on('done', function (event) {
Function4.run();
});
Function4.on('done', function () {
$(".container1").append("All done");
});
Function3.run();
但现在的问题是,当我启动代码时,它总是显示结果为:首先会出现“Function4 complete”,然后是“All done”,3秒后,会出现“Function3 complete”。 这出乎我的意料,因为我的预期是“Function3 complete”排在第一位,“Function4 complete”排在第二位,“All done”预计排在最后。
有人可以帮我解决这个问题吗?谢谢你的建议。
编辑:
我现在已经包含了上面的所有功能。
此外,您可以检查 JSFiddle 中的 js 脚本:http://jsfiddle.net/sporto/FYBjc/light/
我已将 JSFiddle 中的函数从常见的数组推送操作替换为 ajax 请求,
然后一切都出乎我的意料。
【问题讨论】:
-
你能完成你的代码吗?或者为它建立一个 JSFiddle。
-
@MarkGabriel 已添加。
标签: javascript asynchronous listener