2013-04-10 3 views
1

SQL Server에 저장된 새 경고가 없는지 확인하기 위해 ajax를 사용하고 있습니다. 30 초마다 실행되도록 설정했지만 매초마다 데이터베이스를 검사하는 함수를 계속 호출합니다. 여기 내 코드가있다.ajax 호출이 계속 실행 중입니다.

이것은보기의 코드입니다. "_Tasks"는 부분 뷰이며 업데이트 될 뷰입니다. 성공 코드는 결코 그 코드에 도달하지 않기 때문에 아무것도하지 않았습니다.

@Html.Action("_Tasks") 
      <script type="text/javascript"> 
       (function poll() { 

        $.ajax({      
         type: 'GET', 
         cache: false, 
         url: '@Url.Action("TasksRefresh")', 
         dataType: "json", 
         complete: poll, 
         timeout: 30000, 
         success: function (data) { 
          if (data.success == true) 
           alert("Hello"); 

         } 
        }); 
       })(); 
     </script> 

public JsonResult TasksRefresh() 
     { 
      var alerts = getAlerts(); 
      var cache = HttpRuntime.Cache["Tasks"]; 
      if (cache == alerts) 
      { 
       return Json(new 
           { 
            success = false, 
           }); 
      } 
      else 
      { 
       return Json(new 
       { 
        success = true, 
        // View = this.Re 
       }); 
      } 

     } 

답변

3

이 시도 :

(function poll() { 
    $.ajax({      
    type: 'GET', 
    cache: false, 
    url: '@Url.Action("TasksRefresh")', 
    dataType: "json", 
    complete: function() { setTimeout(poll, 30000); }, // Changed, call poll again when 30s has pasted 
    timeout: 30000, // This just says it fails if the request takes more than 30s 
    success: function (data) { 
     if (data.success == true) 
     alert("Hello"); 

    } 
    }); 
})(); 
+0

감사합니다. – zms6445

2

제한 시간 지연이없는 컨트롤러이다. 시간 초과는 요청 실패를 고려하기 전에 대기해야하는 시간입니다. completepoll으로 설정하면 즉시 다른 전화를 걸게됩니다. complete 기능을 지연시켜야합니다.

1

내가, 당신이 AJAX 호출의 완료에 다시 폴 기능을 실행하는 추측 할 수 있습니다. Ajax 호출을 완료하는 데 단지 1 초가 걸릴 수 있습니다.
자바 스크립트 코드에서 타이머를 사용할 수 있습니다. settimeout 또는 setInterval을 사용해보세요. 그리고 그 타이머에서 아약스 전화를하십시오. 도움이되는지 확인하십시오.

0

timeout: 30000은 아약스 호출이 최대 시간 동안 응답을 기다리는 지 확인하는 것입니다.

아약스 호출이 완료되면 바로 폴링 기능을 실행하므로 호출이 빨리 이루어집니다.

관련 문제