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

前端之家收集整理的这篇文章主要介绍了对于ajax获取值没有及时获取到前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

使用 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))

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

猜你在找的Ajax相关文章