2011-10-13 194 views
0

我需要一些幫助與jQuery和停止asp.net按鈕回發。如果你看下面的代碼,我定義了一個名爲err的變量並賦值爲0.然後我有jquery從web服務中獲取一個字符串,它實際上是一個錯誤字符串。如果此字符串的長度爲0,則將err等於1,否則將err等於2,因爲我們收回了業務規則錯誤。jQuery停止按鈕回發

當我調試應用程序時,似乎err等於0,並且從未1或2.它似乎也是Web服務在我最後一條if語句之後得到它的值,我應該停止回發。

任何幫助,將不勝感激。謝謝。

$(document).ready(function() { 
     $('#<%=Button1.ClientID %>').click(function (e) { 

     //Find out the hour and time of the current request 
     var myString = $('#<%=DropDownList1.ClientID %>').val(); 
     var myResult = myString.split(":"); 
     var myHour = myResult[0]; 
     var myTime = myResult[1]; 
     var xDate = $("*[id$='hiddenDate']").val(); 
     var err = 0; 
     //Check to see if the end time of the event somehow falls during a time when another event is occuring. 
     $.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "StudiesWebService.asmx/CheckEndTime", 
      data: "{'UserName':'" + "jacksonm" + "','xDate':'" + xDate + "','xHour':'" + myHour + "','xMinutes':'" + myTime + "'}", 
      dataType: "json", 
      success: function (data) { 
       var myReturnedString = data.d; 
       //if the returned string length is greater than 0, then set err = 2 
       if (myReturnedString.length = 0) { 
        err = 1; 
       } 
       else { 
        err = 2; 

       } 

       $('.result').html(myReturnedString); 
      }, 
      error: function (e) { 
       $('.result').html("An Error occured checking the validity of this event." + e); 
       err = 2; 

      } 



     }); 

     //stop the postback here depending on what err equals. 
     if (err == 2) { 
      return false; 
     } 

     else { 
      return true; 

     } 



    }); 

    }); 

<asp:Button ID="Button1" runat="server" Text="Submit Time" class="CLOSE" onclick="Button1_Click" /> 

回答

2

除非你的Ajax Web服務調用實際上是同步的那麼你的代碼執行的順序就不像你期望的那樣。在您的成功回調中添加警報,錯誤回調,並在此評論之前//stop the postback here depending on what err equals.最後一次警報應該首先發生,因爲Web服務調用將不會返回並在當前函數完成之前執行。

在你的Ajax調用,添加此選項async: false

$.ajax({ 
     type: "POST", 
     async: false, 
+0

是的,你是對的。順序不像我想的那樣。我將如何去改變我的Web服務調用是同步的? – MikeB55

+0

是的,先生。那樣做了。我添加了異步:false,它工作。非常感謝你。 – MikeB55

+0

然而,這不是最好的解決方案,你應該考慮如何重構代碼以不需要同步調用。如果Web服務響應緩慢,或者根本沒有響應,它們將引發問題。 – CaffGeek

0

您正在將myReturnedString.length var設置爲0!

if (myReturnedString.length = 0) {...} 

if (myReturnedString.length == 0) {...} 

編輯嘗試改變行: 停止回傳,你可以嘗試:

error: function (e) { 
     $('.result').html("An Error occured checking the validity of this event." + e); 
     err = 2; 
     return false; 
    } 
+0

這絕對是一個錯誤,並且所做的更改。謝謝。它並沒有解決我的回發問題。我可以看到Web服務返回正確的字符串一秒鐘,然後發生回發。 – MikeB55