`
linwei_211
  • 浏览: 188115 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Ext.Ajax.request2.x实现同步请求

阅读更多

     Ext.Ajax.request在2.x是异步请求的,这样话在当前请求没有完成之前就不能在它的外部使用它的返回值,在下面这个表单验证中如果不是同步请求的话就有问题了,如:

var text = new Ext.form.TextField({
 fieldLabel : '名称',
 height : 23,
 width : 400,
 id : 'flowName',
 name : 'flowName',
 allowBlank : false,
 blankText : '名称不能为空',
 validateOnBlur : true,
 validationEvent : true,
 validator : function() {
  var resultValue;
  Ext.Ajax.request({
   url : '',
 
  sync:true,
   params : {
      name : text.getValue()
   },
   success : function(response, options) {
        var responseArray = Ext.util.JSON.decode(response.responseText);
        resultValue=responseArray.resultValue;
   }
  });
  if (resultValue!=null && resultValue!="") {
      text.invalidText = "该名称己经存在,请重新输入!";
   return false;
  } else {
   return true;
  }
 },
 anchor : '95%'
});


解决办法是:
首先从
http://code.google.com/p/ext-basex/下载ext-basex 脚本文件,解压后按照说明readme文件的方法引用EXT库和ext-basex,
附件中已经挂了包含ext-basex.js的rar。我将其放到了和ext-base.js同一目录,下面是引用库的代码。

<head>
 <link rel="stylesheet" type="text/css" href="scripts/ext/resources/css/ext-all.css" />
 <script type="text/javascript" src="scripts/ext/adapter/ext/ext-base.js"></script>
 <script type="text/javascript" src="scripts/ext/adapter/ext/ext-basex.js"></script>
 <script type="text/javascript" src="scripts/ext/ext-all.js"></script>
</head>
 

然后使用Ext.Ajax.request方法,添加  async: false,   //ASYNC 是否异步( TRUE 异步 , FALSE 同步),其他参数不变。
  Ext.Ajax.request({
            url: "StreamingProxy.ashx",   
            method: "GET",
           
async: false,  
//ASYNC 是否异步( TRUE 异步 , FALSE 同步)
            params: {  //将真正的页面(服务)url参数传递到代理页面
                u: url,
                m: "GET",
                t: ""
            },

            success: function(response, opts) {
            }, //请求成功的回调函数
            failure: function() { alert("获取目录请求失败!"); }  // 请求失败的回调函数
        });
 

 


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics