`
lxs647
  • 浏览: 517552 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Ajax的同步异步问题

阅读更多
问题描述:
在做项目的过程中,碰到了如下一个问题,花了我两天的时间、、、⊙﹏⊙b汗
问题起因:由于在项目中使用的是Jquery Ajax保存的表单,现在页面上有如下两个表单:
form,和subform,
其中form中的主要内容是几个checkbox和文本框
subform中的主要内容是三个文件上传框



后台jQuery代码如下:
function submitAdminForm2(formName) {
clearError();
if(isNaN($("#pdaysvalue").val())){
alert("Please enter number for Person days! ");
return false;
}
frm = document.getElementById(formName);
frmsub = document.getElementById(formName + "sub");

var options = {
//target: "#errormessage",
        success:       showResponse,  // post-submit callback
        error: function(XMLHttpRequest, textStatus, errorThrown) {
        location.href = "../../error/c500Error.jsp?exception=clear";
}
    };
    if(frmsub == null) {
    $(frm).ajaxForm(options);
$(frm).submit();
    } else {
    //if($("#logo1").val() != null && $("#logo1").val() != ""||
    // $("#applogo1").val() != null && $("#applogo1").val() != ""||
    // $("#char1").val() != null && $("#char1").val() != ""
//   ) {
    $("#hiddenlogo1").val($("#logo1").val());
    $("#hiddenapplogo1").val($("#applogo1").val());
    $("#hiddenchar1").val($("#char1").val());
   
$(frm).ajaxForm(options);
$(frm).submit();
    //}
$(frmsub).ajaxForm(options);
$(frmsub).submit();
    }
}

现在症状如下:
当点击保存的时候(由于项目的特殊性,数据都是保存在对应目录下的configurator_XX.properties文件中而非保存在数据库中),每当在form中上传本地图片文件后,点击【save】后保存结果是正确的,但是当我点击【clean logo】按钮后再点击【save】发现数据文件configurator_XX.properties会被覆盖掉,仅仅只是保存当前的几个结果,但是这个时候如果进行debug的话,这个现象是不会重现,但当在非debug时,又会出现这个问题,分析过后台的业务逻辑并没有出现错误。
后来经过高人指点由于jQuery Ajax是异步执行的,这个时候由于提交的两个form如果不是在同步执行的情况下就会出现以上现象,因此,在上面的代码处添加一行:(用红色标记):
var options = {
    //target: "#errormessage",
    async:false,
    success:       showResponse,  // post-submit callback
    error: function(XMLHttpRequest, textStatus, errorThrown) {
    location.href = "../../error/c500Error.jsp?exception=clear";
   }
};

至此,该错误宣告结束O(∩_∩)O~
  • 大小: 41.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics