2011-10-13 2 views
0

jQuery에 대한 도움이 필요하고 asp.net 버튼 포스트 백을 중지해야합니다. 아래 코드를 보면 err이라는 변수를 정의하고 값을 0으로 지정했습니다. 그런 다음 jquery가 웹 서비스에서 문자열을 가져 오게됩니다. 실제로는 오류 문자열입니다. 이 문자열의 길이가 0이면 err = 1로 설정하고 그렇지 않으면 err = 2로 설정합니다. 비즈니스 규칙 오류가 반환되기 때문입니다.jQuery 중지 버튼 포스트 백

응용 프로그램을 디버깅 할 때 err이 0이고 1이나 2가되지 않는 것 같습니다. 또한 웹 서비스는 포스트 북을 중지해야하는 마지막 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

당신의 아약스 웹 서비스 호출이 실제로 동기하지 않는 한 코드가 실행중인 순서는 예상대로가 아닙니다. 성공 콜백, 오류 콜백 및이 주석 바로 앞에 경고를 추가하십시오. //stop the postback here depending on what err equals. 웹 서비스 호출이 반환되지 않고 현재 함수가 완료 될 때까지 실행되기 때문에 마지막 경고가 먼저 발생해야합니다.

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

예, 당신 말이 맞아요. 순서는 내가 생각한 것과 다르다. 웹 서비스 호출을 동기식으로 변경하는 방법은 무엇입니까? – MikeB55

+0

예. 그랬어. 나는 async : false를 추가했고 그것은 효과가 있었다. 고맙습니다. – MikeB55

+0

그러나 이것은 최상의 솔루션은 아니지만 동기식 호출이 필요하지 않도록 코드를 어떻게 재구성 할 수 있는지 생각해야합니다. 웹 서비스가 응답 속도가 느리거나 전혀 응답하지 않으면 문제가 발생합니다. – CaffGeek

0

myReturnedString.length 변수를 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

확실히 오류라고하고 변경을했다 : 당신의 Ajax 호출에

이 옵션 async: false을 추가합니다. 고맙습니다. 그것은 비록 내 다시 게시 문제를 해결하지 못했습니다. 웹 서비스가 잠시 동안 올바른 문자열을 반환하는 것을 볼 수 있습니다. 그런 다음 다시 게시가 발생합니다. – MikeB55

관련 문제