标签:异步 请求 删除 Ext alert userList ajax length ExtJS4
今天在写代码过程中遇到一个奇怪的问题。事情是这种,我写了一个简单的页面用来删除选中的用户,请看以下:
由于后台的servlet的代码实现了依据用户名来删除一条记录。所以我在前台的ExtJS代码里面用了循环:
function deleteUsers(userList) {//删除用户
var msgTip = Ext.MessageBox.show({//显示正常删除的信息提示框
title : '提示',
width : 250,
msg : '正在删除用户请稍候'
});
var n = 0;
// alert(userList.length);
for (var i = 0; i < userList.length; i++) {
//for(var u in userList){
Ext.Ajax.request({
url : "../UserDeleteOneServlet",
method : 'POST',
params : {
username : userList[i]
},
//params:{username:u},
success : function(response) {
n++;
//alert(n);------1
}
});
}
//alert(n);-------2
if (n == userList.length) {
Ext.MessageBox.alert('提示', '所有删除成功');
} else {
Ext.MessageBox.alert('提示', '没有所有删除成功');
}
//alert(n);
updateUserList();
}
当中的userList是我得到的选中行的用户名列表数组。准备用for循环,当所有的请求发给后台的servlet并返回成功后,提示用户删除是否成功。
感觉逻辑毫无问题,结果却是跟想象相差非常多。貌似删除是成功了,可是给我提示个 “ 没有所有删除成功”。
究竟是怎么回事,我想可能是线程安全的问题或者是AJAX请求异步的问题,上网查了下,果然有人跟我遇到一样的问题 在 这里 和这里
原因说白了就是我在推断n==userList.length的时候,那个去做异步请求的ajax请求还没做完。输出的n自然不会是所有请求做完后的n了
解决办法是在ajax请求里面加一个配置项
async:false,
表示把请求设置为同步
然后代码中的n就得到了预想得到的结果了
标签:异步,请求,删除,Ext,alert,userList,ajax,length,ExtJS4 来源: https://www.cnblogs.com/mqxnongmin/p/10660844.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。