日期:2014-05-16  浏览次数:20562 次

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("获取目录请求失败!"); }? // 请求失败的回调函数
??????? });
?

?