如何打破执行并在ajax成功中显示错误?

时间:2014-04-01 18:33:43

标签: javascript jquery ajax jsp

我正在使用ajax调用来检查一些验证,然后通常通过html提交表单。在我的ajax电话中,

    function checkId() {
    var str = $("#formObj").serialize();
    $.ajax({
        type : "post",
        data : str,
        url : "checkForId.mt",
        async : false,
        success : function(txt) {
            if (txt == "pass") {
                return "true";
            } else if (txt == "same") {
                $("#errorMsgIdSame").removeClass("hidden");
                return "false";
            }
        },
        error : function() {
            alert("Error");
        }
    });
}

如果控件进入“通过”,则应继续执行。如果它变为“相同”,则执行应该停止。 我从其他方法中调用这个ajax方法。

    function validateForm() {
    var isValid = true;
    isValid = checkId();
    if (!isValid) {
        $("#errorMsg").removeClass("hidden");
    }
    return isValid;
}

在按钮点击时调用此validatioForm。现在ajax代码正在运行,但validateForm方法没有返回ajax方法。

需要指明如何进行此操作,以便捕获ajax方法的返回以及如何从ajax方法返回。

2 个答案:

答案 0 :(得分:2)

如果我正确理解了你的问题,你想从外部函数返回内部函数的结果。 checkId的这个定义就是这样做的。

function checkId() {
  var result;
  var str = $("#formObj").serialize();
  $.ajax({
    type : "post",
    data : str,
    url : "checkForId.mt",
    async : false,
    success : function(txt) {
      if (txt == "pass") {
        result = true;
        return;
      } else if (txt == "same") {
        $("#errorMsgIdSame").removeClass("hidden");
        result = false;
        return;
      }
    },
    error : function() {
      alert("Error");
    }
  });
  return result;
}

答案 1 :(得分:1)

ajax调用是异步的。

当你调用ajax时,发生的事情是ajax启动一个新线程来执行它的任务 - 在你的案例中是一个帖子。

之后调用ajax的代码继续运行。

当ajax调用正在执行的任务返回时,它会根据任务状态执行其pass或fail部分中的任何内容。

所以基本上你的checkId方法完成并在ajax完成之前返回。

我建议从成功部分或失败部分触发你需要的返回值,如下所示:

success : function(txt) {
  if (txt == "pass") {
     newfunction(true);
  } else if (txt == "same") {
    $("#errorMsgIdSame").removeClass("hidden");
     newfunction(false);
  }
},

编辑:

function newfunction(passFail)
{
   //Do something with variable passFail
}