首页 新闻 赞助 找找看

两个$.ajax如何同时执行

0
悬赏园豆:50 [已解决问题] 解决于 2017-11-07 09:43

最近在做一个asp.net实时进度条遇到的问题

function importExcel() {
if (!checkForm()) {
return false;
}
$.ajax({
url: "/API/BackProcess.ashx",
type: "POST",
dataType: "json",
data: {
action: "ImportExcel",
excelFilePath:$("#ctl00_contentHolder_fpExcel").val(),
cusType: $("#ddlCusType").val(),
relateID: $("#ddlRelation").val(),
state: $("#ddlStatu").val(),
fromUserID: $("#ctl00_contentHolder_hmSelect_hfUserID").val(),
},
success: function (info) {
if (info.success) {

}
else {
ShowMsg(info.ErrMsg, false);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
closeBg();
ShowMsg("错误信息:" + errorThrown, false);
}
});
setTimeout(getProgress(),20);

}

function getProgress() {
alert("bbbbb");
$.ajax({
url: "/API/BackProcess.ashx",
type: "POST",
data: { action: "GetProgress" },
success: function (width) {
if (width != "-1") {
//工作没有结束,继续查询进度
//setTimeout(getProgress(), 20);
$("#progressbar").css("width", width + "%");
$("#progressbar").text(width + "%");
} else {
//工作完成
$("#progressbar").css("width", "100%");
$("#progressbar").text("100%");
}
}
});
}

上述两个$.ajax,其中 importExcel()方法为主方法,后台for循环录入数据把变量存到Session中,getProgress()为获取Session变量更新进度条。按道理说,两个$.ajax都为异步,在后台执行importExcel()方法的for循环时,getProgress()方法的后台代码应该也在执行才对。而现在必须等到主方法的for循环先执行完才会执行获取Session的方法。每次获取到的变量都是100%意味着都是等数据录入完了再去更新进度条,这样实时进度条就完全失去意义。

查了一些资料有大神说可能是session独占或是ajax要设置异步的问题,这些我都做了检查,哪怕是for循环里不涉及任何Session的操作依然是要等到主方法执行完才能执行获取进度的方法。

还请各位大神指点迷津 谢谢。

transworld_zl的主页 transworld_zl | 初学一级 | 园豆:157
提问于:2017-11-03 11:07
< >
分享
最佳答案
0

对的,Session锁定了,不管你客户端怎么开线程,都得等服务器端挨个执行。

这么说吧,你去写个函数,里面lock起来,然后开两个线程,你看看lock里面能不能同时执行 —— 就是这个道理。

并行和串行慢慢理解。

收获园豆:40
花飘水流兮 | 专家六级 |园豆:13560 | 2017-11-03 13:03

举个例,打饭;

两个同学(client)并发打饭,虽然小二(service)有多个,但是瓢儿(session)只有一个;

花飘水流兮 | 园豆:13560 (专家六级) | 2017-11-03 13:38

@花飘水流兮: 谢谢大神啊,那个Session的问题我有注意到的,我后面把Session赋值和取值的操作代码都删掉了只剩下for循环里面其他的内容,不涉及任何Session操作依然是主方法先执行,执行完之后才执行获取进度的方法。两个ajax都是设置异步的。

transworld_zl | 园豆:157 (初学一级) | 2017-11-03 14:15
其他回答(1)
0

ajax支持onprogress事件,如果你的版本不支持,可看下面的这个

http://www.dave-bond.com/blog/2010/01/JQuery-ajax-progress-HMTL5/

收获园豆:10
momoxsy | 园豆:221 (菜鸟二级) | 2017-11-03 14:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册