一、前言
当我们要用到异步请求时可以使用ajax,在之前对于异步的概览只是停留于字面意思上。当今天遇到一个问题时,才真正了解异步的原理。
二、实例
目的:创建一个Js函数,通过ajax将一个参数提交到后台进行验证并将验证结果返回到前台作为函数的返回值。
出现的问题:当运行时函数的返回值总得不到预期的值,但ajax请求确实是成功的,最终发现是由于ajax的异步请求导致了这一问题。
修改之前的代码:
function checkIsproj(node) { var r; $.post("Ajax.ashx", { ParamType: "Init", Action: "CheckIsProj", SelectNode: node.text }, function (data, txtstatus) { if (data == 0) { $.messager.alert("提示", "请选择项目!"); //$("#ProjectTree").combo("showPanel"); r = false; } else { $.post("Ajax.ashx", { ParamType: "Init", Action: "ProjInfroSession", CurrProjName: node.text } ); debugger; r = true; } } ) return r; }
修改之后(将请求变为同步):
//修改:检查所选择的节点是否是项目 function checkIsproj(node) { var r; $.ajax({ type: "post", url: "Ajax.ashx", async: false, data:{ ParamType: "Init", Action: "CheckIsProj", SelectNode: node.text }, success: function (data,txtstatus) { if (data == 0) { $.messager.alert("提示", "请选择项目!"); //$("#ProjectTree").combo("showPanel"); r = false; } else { $.post("Ajax.ashx", { ParamType: "Init", Action: "ProjInfroSession", CurrProjName: node.text } ); r = true; } } }); return r; }
三、总结
不积跬步,无以至千里!