您的位置:首页 > Web前端 > JQuery

jquery ajax 同步查询

2015-11-25 15:23 661 查看
最近有个需求,需要页面再提交前校验该页面下面的订单号码是不是符合条件。需要调用Ajax接口去查询。于是我就写了一个Ajax调用的方法去查询。代码如下:

function isOrdIdHasCargoIns(ordId){
//返回的结果如果是true,提交流程中止。返回结果为false,提交流程继续
var result = false;
$.get("/cargoInsurance/checkOrderHasCargoIns.do",{
ordId : ordId
},function(data,textStatus){
if(data.succeed){
//如果订单下已经有货运险信息,提交流程结束,不提交
if(data.alreadHasCargoIns){
result = true;
}else{
result = false;
}

}else{
//因为后台报错,提交流程暂时停止,一般情况下不会出现这种情况
alert(data.message);
result = true;
}

},"json");
return result;
}
然后在onSubmit()方法中调用它进行是否提交的判断,如下部分代码:

function doSubmit(status){
var ordId = $("#ordId").val();
if(ordId==""){
alert("请选择订单!");
return false;
}
<span style="color:#ff0000;">if(isOrdIdHasCargoIns(ordId)){
//如果订单下已经有货运险,不提交保存
alert("该订单已经存在货运险信息!! ");
return false;
}</span>
但是我在进行测试的时候出了一个奇怪的问题:明明订单不符合要求,后台该接口的debug日志也显示该订单不符合要求,但是页面并没有中止表单提交。

后来我发现,在走到了这个判断方法的时候
<span style="color:#ff0000;">if(isOrdIdHasCargoIns(ordId))</span>
,不会等待,直接往后面走,但是Ajax调用此刻还没有结束。

我发现这应该是一个Ajax同步的问题,后来把代码做了下面的改动:

function isOrdIdHasCargoIns(ordId){
//返回的结果如果是true,提交流程中止。返回结果为false,提交流程继续
var result = false;
<span style="color:#ff0000;">$.ajaxSetup({
async : false
});</span>
$.get("/cargoInsurance/checkOrderHasCargoIns.do",{
ordId : ordId
},function(data,textStatus){
if(data.succeed){
//如果订单下已经有货运险信息,提交流程结束,不提交
if(data.alreadHasCargoIns){
result = true;
}else{
result = false;
}

}else{
//因为后台报错,提交流程暂时停止,一般情况下不会出现这种情况
alert(data.message);
result = true;
}

},"json");
return result;
}


增加了上面代码中红色的部分,把Ajax设置成同步的。这样在进行if判断的时候会等待Ajax执行完毕才会继续往下走。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: