如何将jqery ajax请求代码独立出来?

 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来做返回值