最近在做关于javascript中的ajax问题,最初用的是jQuery中的$.ajax,最后发现该方法对IE部分版本支持有问题,于是准备使用XMLHttpRequest进行ajax处理,在此过程中发现Javascript中Ajax获取function的返回值,
function doCheck(){
var ajax=InitAjax();
ajax.open("POST", url, true);
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send(postStr);
if (ajax.readyState == 4 && ajax.status == 200) {
var data = JSON.parse(ajax.responseText);
if (data.flag == '1') {
var msg = data.data;
if(msg.indexOf('获得')>=0){
var sco = msg.replace('获得','');
grade = sco;
}else{
grade = 0;
}
}else{
grade = data.data;
}
}
return grade;
}
现在的问题是,每次在function doCheck里获取到的grade值为0。
经过调试脚本后发现,function grade在每次执行到ajax.readyState == 4的时候会跳出方法,去执行下面的语句,然后不知道是什么时候又会执行到ajax.status == 200的if条件里面去,然后得到的resultStr 值是正确的。但是在它跳出方法执行下面的语句的时候已经报错了,因为function AddChildNode的 childClassStr还没有得到值,然后去做split,报错了。
错误就出在该ajax请求为异步的,所以获取不到。如果改为同步即可。具体为:ajax.open("POST", url, true);改为ajax.open("POST", url, false);
终于搞清楚这家伙问题出在哪了。哈哈~
LOFTER:小斌の随笔 http://xiruibin.lofter.com/post/c97c5_59ade46