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

extjs ajax 异步请求正常同步请求出错问题的可能原因

发布时间:2020-12-16 00:44:43 所属栏目:百科 来源:网络整理
导读:之前该应用一直工作正常,突然有一天不能正常获取数据,跟踪该请求后发现, "Failed to set the 'timeout' property on 'XMLHttpRequest': timeouts cannot be set for synchronous requests made from a document." 猜测可能原因是因为浏览器升级! 处理方

之前该应用一直工作正常,突然有一天不能正常获取数据,跟踪该请求后发现,

"Failed to set the 'timeout' property on 'XMLHttpRequest': timeouts cannot be set for synchronous requests made from a document."

猜测可能原因是因为浏览器升级!

处理方法:

修改ext-base.js方法中

makeRequest : function(method,uri,callback,postData,options)方法的

中代码:

if(callback && callback.timeout)

为:

if(callback && callback.timeout && options.async)


参考:

http://www.boyunjian.com/do/article/snapshot.do?uid=net.csdn.blog%2Fe_wsq%2Farticle%2Fdetails%2F7521373

Ext.Ajax.request发送同步请求---基于ext-basex

首先从
http://code.google.com/p/ext-basex/下载ext-basex 脚本文件,解压后按照说明readme文件的方法引用EXT库和ext-basex。
<head>
<link rel="stylesheet" type="text/css" href="../lib/ext-3.0+/resources/css/ext-all.css" />
<script type="text/javascript" src="../lib/ext-3.0+/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../lib/ext-3.0+/ext-all[-debug].js"></script>
<script type="text/javascript" src="../lib/ux/ext-basex[-debug].js"></script></head>
然后使用Ext.Ajax.request方法,添加 async: false,//ASYNC 是否异步( TRUE 异步,FALSE 同步),其他参数不变。
Ext.Ajax.request({
url: "StreamingProxy.ashx",
method: "GET",sans-serif'; font-size:14px; line-height:21px">async: false,FALSE 同步)
success: function(response,opts) {
},//请求成功的回调函数
failure: function() { alert("获取目录请求失败!"); } // 请求失败的回调函数
});
注意:做了以上操作后在IE、google chrome、firefox11下是没有问题的,但到了firefox12下去看,就发现执行这个的时候一直执行的是失败,也就是走到failure中去了。
Ext.Ajax.request({
url : 'UserValidate',sans-serif'; font-size:14px; line-height:21px">method : 'post',sans-serif'; font-size:14px; line-height:21px">params : {
type : 'checksession'
},sans-serif'; font-size:14px; line-height:21px">async : false,// async 是否异步( true 异步,false 同步)
success : function(response,sans-serif'; font-size:14px; line-height:21px">alert('response.responseText:'+response.responseText);
var val = Ext.util.JSON.decode(response.responseText);
if (val.nosession) {
window.location.href = "index.html";
return;
}
failure : function(response,options) {
alert('4444444444444444444444444');
alert('failure response.responseText:'+response.responseText);
});

如果加上“async : false,false 同步)”则在firefox中无法执行EXt.ajax.request请求,也就是老跑到failure中去,这个同步是要加上ext-basex.js的。
解决办法:
修改 ext - basex-debug .js 文件中的一条语句:
将以下代码:

if(callback && callback.timeout){

改为:
if(callback && callback.timeout && options.async){

正如大家看到的一样,添加了“&& options.async”。

改完上面的地方就可以了。
如果你不是使用的debug版,使用的是压缩的版本,那么在 ext - basex .js中查找“if(u&&u.timeout){”(注意不含引号),找到后修改为“if(u&&u.timeout&&n.async){”,当然,你可以直接替换。
结论:
将“if(u&&u.timeout){”改为“if(u&&u.timeout&&n.async){”。
注意:测试的时候一定要先清理一下缓存,我试的时候一直没有效果,后来发现是缓存原因。
怎样清理浏览器缓存[各种浏览器]
http://blog.csdn.net/e_wsq/article/details/7521468 也有人说改另一个地方,不过我没有试,上面是我试了没有问题的。
in ext-basex.js 4.1 about line 1011
('timeout' in r) && (r.timeout = callback.timeout);
modified to :
(options.async) && ('timeout' in r) && (r.timeout = callback.timeout);

(编辑:李大同)

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

    推荐文章
      热点阅读