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

:あなたが試すことができポストバックを停止する :ライン

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

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

にEDITを変更

試してみますあなたのコードが実行している順序は期待通りではありません。成功コールバック、エラーコールバック、およびこのコメントの直前に警告を追加してください//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変数を0に設定しています。あなたのAjaxのWebサービスの呼び出しが実際に同期されない限り

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

間違いなく誤りだったと変更を行いました。ありがとうございました。私のポストバックの問題は解決しませんでした。 Webサービスが正しい文字列を1秒間返すことがわかり、ポストバックが発生します。 – MikeB55

関連する問題