jsonResult = getDepInfoJson(Department.id); //此处调用独立的 jquery post 请求
function getDepInfoJson(depId){ var ret; $.post(urlHead + 'getDepInfo.action', { "departmentId":depId}, function(data, status){ if("success"==status){ ret = data; //alert("callBack data:" + data +" ret:"+ret); }else{ $.messager.alert('系统信息',"访部服务器发生错误!",'warning'); } } ); alert("继续ret:"+ ret); return ret; }
为什么return前必须加alert(),才能返回值,且alert()时,输出为 “ret:undefined”?
不好意思 忽略了参数 :cry:
[code="js"]
function getDepInfoJson(depId){
var ret;
$.ajax({
type: "POST",
url: urlHead +"getDepInfo.act",
data: {
"departmentId":depId
},
success: function (data, status){
if("success"==status){
ret = data;
//alert("callBack data:" + data +" ret:"+ret);
}else{
$.messager.alert('系统信息',"访部服务器发生错误!",'warning');
}
},
async: false //改为同步请求
});
return ret;
}
[/code]
这里你用的是异步请求,在alert弹出的时候ajax请求还没有返回
当alert弹出后在关闭的一段时间内,ajax请求有了返回,才把ret赋值
改为同步请求就可以了
[code="js"]
function getDepInfoJson(depId){
var ret;
$.ajax({
url: urlHead +"getDepInfo.act",
success: function (data, status){
if("success"==status){
ret = data;
//alert("callBack data:" + data +" ret:"+ret);
}else{
$.messager.alert('系统信息',"访部服务器发生错误!",'warning');
}
},
async: false //改为同步请求
});
return ret;
}
[/code]
Ajax是异步调用的
$.post
里面那个function(data, status)
是独立运行的 会被调用4次
而post执行完毕 function 可以看做是启用一个线程 去和服务器通信
所以 会有延迟 但不影响post 以及 getDepInfoJson的执行
至于你说的alert才会有结果 其实并不是
而是alert阻止了 getDepInfoJson运行 从而给了 function 足够的时间运行完毕
此时刚好带回 歪打正着
正确的做法是在function 里 定义 全局的ret来做返回值