0 0

一段EXT 3下JS异步验证代码的疑惑10

用EXT框架(3.2.1)的时候遇到了用户名AJAX异步验证的问题,直接在VALIDATOR函数中写的话,由于AJAX异步执行,等不到服务器返回值,函数就先返回了
在网上搜到解决方案如下
var IsExsit = false;
function()
                   {
                      //本方法亦可以使用下面被注释的部分代替
                   var username = Ext.get('username').dom.value;
                   Ext.Ajax.request({
                      url:'CheckUserName.aspx',
                      params:{name:username},
                      success: function(response, options) {            
                         var data = Ext.util.JSON.decode(response.responseText);             
                         if(data.success == true)  ReturnValue(true);
                         else ReturnValue(false);//不能在success方法里面直接返回。
                      }  
                  });
                 function ReturnValue(ok){
                IsExsit = ok;
              }
              return IsExsit; 
                   },

但还是没有看懂,用谷歌浏览器调试,也和之前一样是先直接返回了IsExsit的原始值false,那么这个写法是如何把问题解决掉的呢?
2013年2月24日 00:51

5个答案 按时间排序 按投票排序

0 0

因为是异步的原因所以,他会执行下去, 你可以把之后的代码,放到 ajax方法的success里去调用。

2013年2月25日 16:16
0 0

用异步请求:return 写在分别success和failure里面,应该可以解决。 要不然就用同步请求,用到了ext-basex.js这个文件

2013年2月25日 09:07
0 0

ajax 异步的 在你的这个结构上面 我觉得没有解决方案 。

楼主为何一定要用返回值呢? 你可以在回调里面处理逻辑嘛。

2013年2月25日 08:41
0 0

楼主你理解的是对的。这是ajax的特点,不可避免的。如果不改变结构只有一个办法,就是把异步请求变成同步请求。记得没错的话Ext.Ajax.request提供了这方面的一个参数。

2013年2月24日 15:43
0 0

应该在 success 函数中判断这个值,如果返回特定的值(true)就调用相应的方法。当然要把你的标识符IsExsit 设置为true。

2013年2月24日 09:54

相关推荐

Global site tag (gtag.js) - Google Analytics