对于ajax获取值没有及时获取到
平时项目中会出现一种情况就是 使用 new Ajax.Request来处理一些变量 例如
method:
'post'
,
parameters:
'id='
+id,
onComplete:
function
(response){
var
data=response.responseText;
if
(data!=
null
){
var
json=eval(
"("
+data+
")"
);
bianliang=json[
"test"
];
}
}
});
//alert(bianliang);
if
(bianliang!=
null
){
//........
}
最初的想法是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)) 可惜它有大小的最小设定 用户显然是能够看到他的 这个可以当做备选处理方法 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |