2010-02-09 67 views
9

我在我的MVC应用程序中使用jQuery ajax版本1.4.1(虽然我讨论的问题与旧版本的jQuery 3.2.1 ),以便在用户注册期间检查用户名是否已经注册。当用户点击“检查可用性”按钮时,我检查服务器上的可用性,然后显示一条消息,同时显示忙图像来代替检查按钮(实际上隐藏检查按钮并显示图像)。这是一个同步调用(async:false),我使用beforeSend:和complete:显示和隐藏忙图像和检查按钮。这个东西在Firefox上运行的很好,但在IE 8和Chrome中,既没有显示繁忙的图像,也没有隐藏检查按钮,而是在整个事件挂起时仍然按住检查按钮。可用和不可用的消息显示正确。下面是代码:jQuery Ajax(beforeSend和complete)在FireFox上正常工作,但不在IE8和Chrome上

HTML在用户控件(ASCX):

<div id="available">This Username is Available</div> 

div id="not_available">This Username is not available</div> 

<input id="txtUsername" name="txtUsername" type="text" size="50" />&nbsp; 

<button id="check" name="check" type="button">Check Availability</button> 

<img id="busy" src="/Content/Images/busy.gif" /> 

在此用户控件的顶部,我连接一个外部的JavaScript文件具有以下代码:

$(document).ready(function() { 

    $('img#busy').hide(); 
    $('div#available').hide(); 
    $('div#not_available').hide(); 

    $("button#check").click(function() { 
     var available = checkUsername($("input#txtUsername").val()); 

     if (available == "1") { 
      $("div#available").show(); 
      $("div#not_available").hide(); 
     } 
     else { 
      $("div#available").hide(); 
      $("div#not_available").show(); 
     } 
    }); 
}); 


function checkUsername(username) { 

    $.ajax({ 

     type: "POST", 

     url: "/SomeController/SomeAction", 

     data: { "id": username }, 

     timeout: 3000, 

     async: false, 

     beforeSend: function() { 

      $("button#check").hide(); 

      $("img#busy").show(); 

     }, 

     complete: function() { 

      $("button#check").show(); 

      $("img#busy").hide(); 

     },   

     cache: false, 

     success: function(result) { 

      return result; 

     }, 

     error: function(error) { 

      $("img#busy").hide(); 

      $("button#check").show(); 

      alert("Some problems have occured. Please try again later: " + error); 

     } 

    }); 

} 
+0

社区发生了什么事? 18人查看了这个问题,但2天后没人回答。这真的很复杂,或者我没有正确地问它吗? – 2010-02-12 07:05:17

+0

如果您将true设置为true或false,您确定可以将其与'1'进行比较。如果(可用)应该是足够的...这不会回答你的问题:-) – Kennethvr 2010-02-12 07:42:41

+0

谢谢,是的,我注意到,虽然试图找出实际问题,我也修复这个东西,但如预期的 - 它没有做任何不同。我将使用此更改更新上面的代码。 – 2010-02-12 07:50:13

回答

14

我找到了我的问题的答案。这实际上是同步调用(异步= false),这使IE疯狂。我删除了这一点,并调整了代码,现在一切正常。

+11

你知道吗,你可以把你的答案标记为“正确的”,从而得到一些自我回答的问题,自学者badgs? :) – 2012-06-05 15:54:40

+0

@Farhan Zia非常感谢兄弟! :) – 2013-08-12 09:36:47

+0

我已经试过这在我的代码,它的工作原理。谢谢 !!!但是,关于如何删除异步使其工作的任何想法? – chaitu 2015-05-28 05:05:18

1

一点要注意:异步=虚假的已废弃的jQuery 1.5

的应该使用完整的()回调来代替。

+1

这是错误的。从jQuery 1.5开始,不推荐async = false。 – HorseloverFat 2013-09-09 18:22:06

相关问题