平时项目中会出现一种情况就是
使用 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
){
//........
}
最初的想法是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))
原文链接:https://www.f2er.com/ajax/165010.html