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

对于ajax获取值没有及时获取到

发布时间:2020-12-16 00:36:07 所属栏目:百科 来源:网络整理
导读:平时项目中会出现一种情况就是 使用 new Ajax.Request来处理一些变量 例如 new Ajax.Request(url,{ method: 'post' , parameters: 'id=' +id, //asynchronous : false, onComplete: function (response){ var data=response.responseText; if (data!= null )

平时项目中会出现一种情况就是

使用 new Ajax.Request来处理一些变量

例如

newAjax.Request(url,{

method: 'post' ,
parameters: 'id=' +id,
//asynchronous : false,
onComplete: function (response){
var data=response.responseText;
if (data!= null ){
var json=eval( "(" +data+ ")" );
bianliang=json[ "test" ];
}
}
});
//alert(bianliang);
if (bianliang!= null ){
//........
}
在没有alert之前 bianliang值一直为ajax请求之前的值 只有alert之后才可以获取到最新的值

最初的想法是js执行顺序 ajax在没有执行完之前就执行了下边的if判断 导致出问题

于是就尝试利用一下休眠 让if晚执行一些时间

var start = new Date().getTime();

while(true){

var end = new Date().getTime();

if(end-start>1000) break;

}

虽然进行了类似休眠的功能 但是并不影响问题的出现

故可以认为不是因为并行执行的原因

搜索了一下相关资料 发现ajax是新发出一条进程

由于不知道这种如何处理 暂时算是遗留下的问题

突然想到ajax默认是异步 也就是会说客户端不会等待结果就会往下边进行处理

所以果断设置一下同步 即上边注释的(默认是异步 false是同步)

设置完之后果然可以正确的获取到值了

随后想到同步会造成用户的一些不好体验 毕竟是需要等待执行完才能继续往下执行 也就是说如果这次请求花费时间很长很长 就会让用户一直在等待

接下来自然想到既然是弹出警示框才能获取到

那何不造一个仿警示框

即 showModelessDialog即可 然后只需要设置自动关闭就行了 (setTimeout("iframe.location.reload();",1))

可惜它有大小的最小设定 用户显然是能够看到他的 这个可以当做备选处理方法

(编辑:李大同)

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

    推荐文章
      热点阅读