有时我的jquery ajax调用只是挂起

时间:2010-12-03 04:21:49

标签: jquery

我的用户输入了一个电子邮件地址,并在输入时进行了一些验证。它检查电子邮件是否在数据库中,并根据结果返回内容。问题是,它只是坐在那里的10次中有1次并且从未使它成功,所以我的用户看不到加载动画。

代码如下所示:

function check_email(email) {

  var event_id = $('input[name=event_id]').val();


  // submit the data to the booking form again
  $.ajax({
    type: 'POST',
    url: 'check_booking_email.php',
    cache: false,
    data: 'booking_email='+email+'&event_id='+event_id+'',
    success: function(data) {
      $('#next').remove();
      $('.booking_email_helper').after(data);
    }
  });

 }



$(document).ready(function(){

    $("#booking_email").keyup(function() {

  var e_long = $('#booking_email').val().length;

  if(e_long > 5) {

    $('#checking_email .email_loader').fadeIn();
    $('#checking_email .text').html ('<span class="black">We are just checking your email.</span>');


    // show checking email animator...
    $('#checking_email').fadeIn();


    clearTimeout($.data(this, "timer"));
    var ms = 1000; //milliseconds
    var val = this.value;
    var wait = setTimeout(function() {
      check_email(val);
    }, ms);
    $.data(this, "timer", wait);

  } // end if e_long

   });

基本上,在keyup上,如果字符长度超过5,请加载动画并启动ajax调用...

我想知道在我的代码中是否有一些特别突出的东西可能会导致这个问题被抓住...有没有办法如果由于某种原因它被挂起我们可以告诉它再试一次?我没有玩失败的结果...我想知道是否通常做一些事情,比如在失败时调用自身内部的函数。

思想?

1 个答案:

答案 0 :(得分:1)

您似乎在任何时候都没有隐藏加载指示器(也许您只是忘了将它包含在Q中?)。尝试在$.ajax调用的成功回调中淡出#checking_email:

success: function(data) {
      $('#next').remove();
      $('.booking_email_helper').after(data);
      $("#checking_email").fadeOut();
}