加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ExtJS4 ajax请求同步异步问题

发布时间:2020-12-16 00:35:35 所属栏目:百科 来源:网络整理
导读:今天在写代码过程中遇到一个奇怪的问题,事情是这样的,我写了一个简单的页面用来删除选中的用户,请看下面: 因为后台的servlet的代码实现了根据用户名来删除一条记录,所以我在前台的ExtJS代码里面用了循环: function deleteUsers(userList) {//删除用户v

今天在写代码过程中遇到一个奇怪的问题,事情是这样的,我写了一个简单的页面用来删除选中的用户,请看下面:

因为后台的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就得到了预想得到的结果了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读