2014-06-17 3 views
2

누구나 Javascript/JQuery를 사용하여 특정 간격으로 webMethod를 폴링하는 방법을 알 수 있습니까? 나는 setInterval & setTimeOut을 시도했지만 그들 중 누구도 나를 위해 일하고 있지 않다. 내 응용 프로그램은 사용자의 요청에 대한 보고서를 생성합니다. 보고서 생성이 10-15 분이 걸리므로 UI ​​스레드를 차단하고 싶지 않아서 자바 스크립트에서 버튼 클릭으로 reportID를 만들고 _dopostback을 사용하여 버튼 클릭 이벤트를 호출하고 reportID를 전달해야합니다. C# 버튼 클릭 이벤트가 위임/BeginInvoke를 사용하여 generate_report() 함수를 호출하고 지금은 내가 보고서를 얻을 중위 만든의 WebMethod에 폴링 할 ... 여기에 버튼 클릭에 코드 조각 .. 그래서Jquery/Javascript를 사용하여 WebMethod를 폴링하는 방법

$("#btn1").click(function() { 
    var ReportID = generateReportID(); 
    __doPostBack("<%= btnGenerate.UniqueID %>", ReportID); 
    IntervalID = setInterval(function() { Poll(ReportID); }, 30000); 
}); 

function Poll(id) { 
    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/WebMethod", 
     data: "{'ReportID','" + id + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
        // Check if report is ready 
        // If not poll again after 30 secs 
        // If report is ready Get the Report and clearInterval 
     }, 
     failure: function (error) { 
     } 
    }); 
}; 

[WebMethod] 
public static string WebMethod(string ReportID) 
{ 
    if (ResultSet.ContainsKey(int.Parse(ReportID))) 
    { 
     return "Ready"; 
    } 
    else 
    { 
     return "NotReady"; 
    } 
    } 

입니다 보고서가 "준비"가 될 때까지 매 30 초마다이 웹 방법으로 투표를 시작하고 한 번 준비가 끝난 후 간격을 지우려면 어떻게합니까? ??

답변

2

하여 setInterval은 잘 작동하고, 다시 게시 .... 포스트 백 그래서 지금은에 코드 숨김하기 위해 모든 ReportIDs을 통과 .... 버튼 클릭은 이전 setintervals을 죽일 즉 범인이었다 버튼 클릭 기능 및 클라이언트 스크립트를 사용하여 일 정 설정

Page.ClientScript.RegisterStartupScript (typeof (Page), "test"+ UniqueID, "setInterval (function() {Poll (ReportID);}, 30000);" ;

코드 숨김 기능에 ReportID를 보내고 클라이언트 스크립트를 사용하여 반복적으로 ReportID를 설정하고 후속 포스트 백에서 사용할 수 있도록 ReportID를 localStorage에 저장할 수도 있습니다.

참고 : 감사

0

원하는 결과를 얻을 때까지 SetTimeout을 사용하여 재귀 적으로 호출합니다.

예 :

function initPoll() 
{ 
    setTimeout(pollWebServer(), 30000); 
}  
function pollWebServer() 
{ 
    if(!checkResult()) 
     setTimeout(pollWebServer(), 30000); 
}  
function checkResult() 
{ 
    //Do some work to check result that you are looking for 
    //This is where you would check your Web Method using jQuery 
    return false; 
} 
+2

감사합니다 확인하고 응답 할 것이다 Safjanowski @Krzysztof 당신의 도움에 대한 톤 ... 그렇게된다면 ... :) –

+2

는 ... 제어하기 전에 pollWebServer()에 돌아 오기 작동하지 않습니다 결과는 checkResult()의 ajax 호출에서 검색됩니다. –

관련 문제