2011-10-13 101 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