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

来源:互联网 发布:ab压力测试nginx 编辑:程序博客网 时间:2024/05/29 10:30

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

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

例如

new Ajax.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))

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

0 0
原创粉丝点击