2010-02-09 111 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

相關問題