2014-03-19 3 views
0

그래서 async-task에서 값을 얻으려고합니다. Jquery-xhr 요청을 통해 progressbar에 비동기 작업의 값을 가져 오려고합니다. 서버 측 방식은 작동하며 jquery-xhr-call도 작동하기 때문에 처음에는 적합하지 않습니다.AJAX XHR-Call이 잘못된 인수 예외를 만듭니다.

ASPX-코드 : 외부 Javascript.js에서

<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (hfworking.Value == "true") 
     { 
      LabelProgress.Text = hflabel.Value; 
      ProgressBar1.Maximum = Convert.ToInt32(hfPBMax.Value); 
      ProgressBar1.Value = Convert.ToInt32(hfPBVAL.Value); 
     } 
    } 
</script> 
<html> 
<head runat="server" id="head1"> 
<script src="JavaScript.js" type="text/javascript"></script> 
<script src="jquery-1.11.0.min.js" type="text/javascript"></script> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager runat="server" ID="pageScriptManager" EnableViewState="true"/> 
    <%--<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate>--%> 
     <%----%><%--OnClick="Button1_Click"--%> 
      <asp:Button runat="server" ID="btnDoTask" Text="Do Task" OnClientClick="StartJavaScriptProgress()" /> 

      <br /> 
      <asp:Label ID="LabelProgress" runat="server" EnableViewState="true"></asp:Label> 

      <br /> 
      <eo:ProgressBar ID="ProgressBar1" runat="server" Width="250px" BackgroundImage="00060301" 
       BackgroundImageLeft="00060302" BackgroundImageRight="00060303" ControlSkinID="None" 
       IndicatorImage="00060304"> 
      </eo:ProgressBar> 
      <asp:HiddenField ID="hflabel" runat="server"/> 
      <asp:HiddenField ID="hfPBMax" runat="server"/> 
      <asp:HiddenField ID="hfPBVAL" runat="server"/> 
      <asp:HiddenField ID="hfworking" runat="server" Value="false" /> 

내 자바 스크립트 코드 :하여 setInterval의 캐치에 "잘못된 인수": 그것은에 allways 나에게 오류를 제공

function StartJavaScriptProgress() { 
    try { 
     //setTimeout(WebService(), 1000); 
     document.getElementById("hflabel").value = "Currently Working ..."; 
     var intervall = window.setInterval(WebService(intervall), 1000); 
    } 
    catch (Error) { 
     alert(Error.Description + " " + Error.InnerException + " " + Error.StackTrace); 
    } 
}; 

function WebService(intervall) { 
    try { 
     if (document.readyState == 'complete') { 

      $.ajax(
    { 
     type: "POST", 
     url: "AsyncTest.aspx/GetProcess", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
      if (response.d.Progressvalue == 'FINISHED') { 
       window.clearInterval(intervall); 
      } 
      else { 
       document.getElementById("hfPBMax").value = response.d.Progressmaximum; 
       document.getElementById("hfPBVal").value = response.d.Progressvalue; 
       document.getElementById("hfworking").value = "true"; 
       alert("Worked! the maximum is " + response.d.Progressmaximum + " and the actual value is " + response.d.Progressvalue + "!!"); 
      } 
     }, 
     error: function (response) { 
      alert(response.status + " " + response.responseText); 
     } 
    }) 
     } 
    } 
    catch (Error) { 
     alert(Error.Description); 
    } 
}; 

. .. 나는 이유를 이해하지 않느냐? 또한이 코드로 페이지 수명주기를 얻지 못합니다. 호출이 발생하고 예외가 발생하며 "hfPBMax"로 설정된 중단 점이 있으면 예외가 발생한 후에 나타납니다. asp.net 수명주기에 대해 배운 것으로부터 나를 위해 아무런 의미가없는 동안 페이지 번호로 점프하는 빈도를 언급하지 않습니다 ... 누군가가 내 실수에 도움이되고 실패 할 수 있다면 좋을 것입니다.

답변

1

당신의 간격이 시도 :

var intervall = window.setInterval(function(){WebService(intervall)}, 1000); 

을, 그렇지 않으면 당신이 setInterval을에 전달하는 것은 기능하지 않을 수 있습니다 WebService에의 실행 (intervall)의 결과이며 따라서 예외가 발생합니다

관련 문제