• ExtJS4 ajax请求同步异步问题


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

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


  • 相关阅读:
    爱情三十七课,恩情仪式
    爱情三十二课,幽默的用法
    爱情四十二课,距离就是问题
    爱情二十八课,你为什么爱
    爱情三十四课,放手的时机
    爱情三十九课,爱的礼物
    爱情三十三课,读懂愤怒
    爱情三十一课,先信自己
    爱情三十课,爱情整理术
    爱情二十四课,妥协50分
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10660844.html
Copyright © 2020-2023  润新知