需求:
页面中有四个相似的模块,所以以末尾的数字作为区分,然后我想的是把调用后台数据的ajax放在for循环里,每循环一次调用一次ajax
问题:
循环结束后才调用ajax
原因:
for 循环是一个单线程的东西,而ajax是多线程的,之所以称之为异步同步,是因为执行到ajax的时候去后台开启了一个线程,但是for循环本身就是一个单线程的东西,那么执行到ajax的时候,ajax开启了一个线程,for循环没有等它,直到for循环结束的时候,才会把ajax返回的数据拿回来,所以出问题了。
解决方案:
1.把ajax改成同步 async: false,//设置成同步
2.将ajax放在一个函数里,然后每循环一次调用一次函数
我选择了第二种方法
$(function () {
$("#nbss1").empty();
$("#nbss2").empty();
$("#nbss3").empty();
$("#nbss4").empty();
$("#tip1").hide();
$("#tip2").hide();
$("#tip3").hide();
$("#tip4").hide();
for (var i = 1; i < 5; i++) {
bindData(i);
}
});
function bindData(i) {
$.ajax({
type: "POST",
url: "/Ajax_Handle/xxx.ashx?Action=getNbss",
data: { "type": i },
success: function (data) {
if (data.code == 2000) {
if (data.divInfo == "") {
$("#tip" + i).show();
$("#nbss" + i).hide();
}
else {
$("#tip" + i).hide();
$("#nbss" + i).show();
$("#nbss" + i).append(data.divInfo);
}
}
}
})
}