本文分析jQuery中getJSON函数因异步特性导致外层函数提前返回undefined的问题。通过设置async:false开启同步模式,或重构代码使用回调函数处理数据,确保业务逻辑按预期顺序执行,解决表单验证中数据返回顺序错乱的情况。
jQuery AJAX 同步问题:getJSON 异步执行导致 return 失效的解决方案
JavaScript 代码示例
具体实现代码如下:
function existProduct(obj){
var productname = escape(obj.val());
$.getJSON("../product/searchProductByName.action",datat,function(data){
var falg;
falg = data[0]['existproduct'];
//falg返回为no 或yes,
return falg;
});
}
function validateform(){
//alert(existProduct($("#products_name")));
if(validateNotnull($("#products_name"))){
if(existProduct($("#products_name"))){
$("#productform").submit();
}else{
$("#spanproduct").html("业务名称已经存在");
}
}else{
$("#spanproduct").html("业务名称不能为空");
}
} 在上述 existProduct(obj) 函数中,调用了 jQuery 的 getJSON 方法以获取数据库查询结果,经 Firebug 调试确认请求本身无误。然而实际执行时出现逻辑顺序颠倒:return falg 语句先于 getJSON 回调执行,导致函数提前返回 undefined。请专家指点如何修正此问题。