Ajax请求只返回一次结果

mac2024-03-19  25

本文主要介绍Ajax在for循环中,请求只返回一次结果的问题解决。

一、async决定了同步与异步请求

1.1 Ajax默认是异步请求,会继续执行Ajax后面的脚本,直到服务器端返回数据后,触发Ajax里的success方法,这时候执行的是多个线程,其根源是async属性默认是 true。 1.2 async 设置为 false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。

二、枚举代码

2.1 app.js封装ajax请求
ajax: function(option) { ajaxCount++; var _ajaxCount = ajaxCount, return $.ajax({ type: option.type || "POST", url: app.getItem(app.localKey.url) + option.url, // 请求的url timeout: option.timeout || app.timeout, // 超时 async: option.async || false, // 同步异步控制 dataType: "json", // 参数类型 data: option.data, // 参数 success: function(r) { // 返回值 option.success && option.success(r); }, error: option.error }); },
2.2 当async为true
for(var i=0;i<obj.length;i++){ app.ajax({ url: url, // 请求url async: true, success: function(r) { if (r && r.errcode == 0) { var ddid = r.value.ddid; vm.chatList.push(ddid); } else { $.toast(r.errmsg); } } }); }

上述的for循环案例,vm.chatList只会push最后一个返回值。

2.3 当async为false
for(var i=0;i<obj.length;i++){ app.ajax({ url: url, // 请求url async: false, success: function(r) { if (r && r.errcode == 0) { var ddid = r.value.ddid; vm.chatList.push(ddid); } else { $.toast(r.errmsg); } } }); }

上述的for循环案例,vm.chatList通过push新增的数组由obj的长度决定。

吴维炜 HTTPS CSS ECMAScript 6 Q: 有多少程序员会去更换灯泡?A: 没有,那是硬件问题。Q:为什么程序员总是把圣诞节与万圣夜搞混?A:因为 DEC 25 = OCT 31
最新回复(0)