如果$ .get返回某个值时提交提醒

问题描述:

我遇到下面的代码有问题。我无法在提交时弹出警报。那么我唯一的方法就是在$ .get之外插入另一个警报。 (你可以在下面看到它)。我会感谢任何帮助和指导,我可能会得到。

$('#addEvent').submit(function() { 
    var date = $('#day').val(); 
    var startTime = $('#startTime').val(); 

    $.get("/cal/check-For-Existing-Events/time/"+date+"%20"+startTime+":00/room/1234", function(data) { 
     if(data == "Error: date") { 
      alert('Error: This date has expired.'); 
      return false; 
     } 
     else if(data == "Error: existing") { 
      alert('Error: You already have a reservation made on this day.') 
      return false; 
     } 
     else { 
      return true; 
     } 
    }); 
     alert('test'); //If I remove this part, above errors don't work. WTH!? 
}); 
+5

'$ .get'回调中的'return'语句没有做你认为他们正在做的事情 - 它们只是从'$ .get'回调函数返回而不是从提交处理程序返回。表单很可能会一直提交,除了添加最后一次警报时,这会延迟足够长的时间执行'$ .get'。 – 2012-01-16 13:27:20

+0

[如何在提交表单之前等待ajax验证完成]可能的重复(http://stackoverflow.com/questions/866654/how-to-wait-for-ajax-validation-to-complete-before-提交表格) – 2012-01-16 13:44:44

谢谢大家的建议,我尝试了所有的人,但没有人似乎工作这就是为什么我决定用从头开始一些我得到的信息从以前的回答。

下面是可以运行的代码。+我也必须补充说,我必须删除提交按钮从表单中取出另外一个用于代码工作的。我真的不知道为什么,所以如果任何人有任何有关这方面的信息..告诉。 :)

$("#submit").click(function() { 
    var timeStamp = $("#day").val()+" "+$("#startTime").val(); 
    var room = $room ?> 
    $.post("/cal/check-For-Existing-Events/time/"+timeStamp+"/room/"+room, function(data) { 
     if(data == "Error: date") { 
      $("#errorDisplay").html("Select future date.") 
      $("#errorDisplay").show(); 
      return false; 
     } 
     if(data == "Error: exists") { 
      $("#errorDisplay").html("You already have a reservation.") 
      $("#errorDisplay").show(); 
      return false; 
     }else { 
      $("#addEvent").submit(); 
     } 
    }); 
    return false; 
}); 

我希望这个答案对任何人都有帮助。干杯! :)

var ready = false; 
$('#addEvent').submit(function() { 
    if (!ready) { 
     var date = $('#day').val(); 
     var startTime = $('#startTime').val(); 

     $.get("/cal/check-For-Existing-Events/time/" + date + "%20" + startTime + ":00/room/1234", function(data) { 
      if(data == "Error: date") { 
       alert('Error: This date has expired.'); 
      } else if (data == "Error: existing") { 
       alert('Error: You already have a reservation made on this day.'); 
      } else { 
       ready = true; 
       $('#addEvent').submit(); 
      } 
     }); 
     return false; 
    } 
}); 
+0

这看起来像一个可行的答案给我。没有@RobHruska他们不会,因为他使用布尔标志变量来确定表单是否准备好提交,第一个循环是错误的,因此ajax调用已经完成。如果'.get'请求没有返回错误,那么该标志被设置为true,并且提交处理程序被再次调用。 – 2012-01-16 13:39:50

+0

这就是为什么您需要在运行ajax时禁用表单提交按钮。当ajax返回并且没有错误时,启用提交按钮或仅使用js提交表单。 – 2012-01-16 13:40:08

只需添加一个参数 “e” 和e.preventDefault();

$( '#的addEvent')提交(函数(E){ e.preventDefault(); VAR日期= $( '#天')VAL(); 变种开始时间= $('# 。开始时间“)VAL();

$.get("/cal/check-For-Existing-Events/time/"+date+"%20"+startTime+":00/room/1234", function(data) { 
     if(data == "Error: date") { 
      alert('Error: This date has expired.'); 
      return false; 
     } 
     else if(data == "Error: existing") { 
      alert('Error: You already have a reservation made on this day.') 
      return false; 
     } 
     else { 
      return true; 
     } 
    }); 
     alert('test'); //If I remove this part, above errors don't work. WTH!? 
});