2016-12-08 2 views
0

beforeSend 섹션에서 나는 setTimeout을 추가했습니다. ajax가 20 초 이상 걸리면 시간 초과 메시지가 나타납니다. 아약스가 20 초 전에 성공하면 setTimeout이 계속 실행 중이며 시간 초과 메시지가 나타납니다.성공하면 setTimeout을 중지하는 방법은 무엇입니까?

아약스가 20 초 이내에 완료되면 시간 초과 메시지가 나타나지 않도록하려면 어떻게해야합니까? 도 20 :

형태

<?= $form->field($relasi, 'npsn')->textInput(['class' => 'form-control', 'id' => 'npsn', 'onkeyup' => 'sendFirstCategory(this.value)', 'autocomplete' => 'off'])->label(false); ?> 

자바 스크립트

function sendFirstCategory(npsn) 
{ 
    var test = npsn; 
    var timeoutvar = null; 

    $.ajax({ 
     url: '<?php echo \Yii::$app->getUrlManager()->createUrl('keranjang/isi-data-ajax') ?>', 
     type: 'POST', 
     data: { test: test }, 
     beforeSend:function() 
     { 
      $('#hokya').show(); 
      $('#hokya').html('<img src="../img/Preloader_1.gif" alt="Loading..." />'); 

      var a = ""; 

      $('form [id=nm_sekolah]').val(a); 
      $('form [id=email]').val(a); 
      $('form [id=telp]').val(a); 
      $('form [id=alamat]').val(a); 
      $('form [id=penanggung_jawab]').val(a); 

      timeoutvar = setTimeout(function() { 
       $("#hokya").hide(); 
       $('#login-modal').modal('show'); 
       $('form [id=nm_sekolah]').val(a); 
       $('form [id=email]').val(a); 
       $('form [id=telp]').val(a); 
       $('form [id=alamat]').val(a); 
       $('form [id=penanggung_jawab]').val(a); 
      }, 20000); 
     }, 
     success: function(data) 
     { 

      clearTimeout(timeoutvar); 
      var o = $.parseJSON(data); 

      $.each(o, function(key, value){ 
       $('form [id=' + key + ']').val(value); 
      }); 

      $('#hokya').hide(); 
     } 
    }); 
} 
+3

'clearTimeout (timeout)'을 시도해 보셨습니까? – NewToJS

+0

* "[성공] 거기에 clearTimeout을 선언하면 setTimeout이 여전히 실행 중입니다."* 성공한 처리기에서 'clearTimeout()'이있는 곳에서 작동하지 않는 코드를 표시하려면 질문을 편집하십시오. 그리고 제쳐두고, 왜 당신은''form [id = nm_sekolah] '와 같은 셀렉터를 사용하고 있습니까? 왜''# nm_sekolah ''가 아닌가? – nnnnnn

+0

죄송합니다. 나는 그것을 편집했다. ''form [id = nm_sekolah] ''그냥 잘 작동했습니다. @nnnnnn –

답변

0

나는 당신이 오류 콜백 함수를 작성하고, 상태가 timeout.of 물론, 당신은 시간 제한을 설정해야하는지 여부를 확인할 수 있다고 생각합니다. JQuery와의

아약스 API :

오류 유형 : 요청이 실패 할 경우 기능 (jqXHR jqXHR, 문자열 textStatus, 문자열 errorThrown) 함수가 호출된다. 이 함수는 세 개의 인수를받습니다. jqXHR (jQuery 1.4.x, XMLHttpRequest) 객체, 발생한 오류 유형을 설명하는 문자열 및 선택적 예외 객체 (발생한 경우). 두 번째 인수 (null 이외)에 가능한 값은 "timeout", "error", "abort"및 "parsererror"입니다. HTTP 오류가 발생하면 errorThrown은 HTTP 상태의 텍스트 부분 (예 : "찾을 수 없음"또는 "내부 서버 오류")을받습니다. jQuery 1.5부터 오류 설정은 일련의 함수를 수용 할 수 있습니다. 각 함수가 순서대로 호출됩니다. 참고 :이 처리기는 도메인 간 스크립트 및 도메인 간 JSONP 요청에 대해 호출되지 않습니다. 이것은 Ajax 이벤트입니다.

function sendFirstCategory(npsn){ 
var test = npsn; 
$.ajax({ 
    url: '<?php echo \Yii::$app->getUrlManager()->createUrl('keranjang/isi-data-ajax') ?>', 
    type: 'POST', 
    data: { test: test }, 
    beforeSend:function() 
    { 
     $('#hokya').show(); 
     $('#hokya').html('<img src="../img/Preloader_1.gif" alt="Loading..." />'); 

     var a = ""; 

     $('form [id=nm_sekolah]').val(a); 
     $('form [id=email]').val(a); 
     $('form [id=telp]').val(a); 
     $('form [id=alamat]').val(a); 
     $('form [id=penanggung_jawab]').val(a); 
    }, 
    timeout:200000, 
    success: function(data) 
    { 
     var o = $.parseJSON(data); 

     $.each(o, function(key, value){ 
      $('form [id=' + key + ']').val(value); 
     }); 

     $('#hokya').hide(); 
    }, 
    error:function(jqXHR,textStatus) 
    { 
     if (textStatus=='timeout') { 
      var a = ""; 
      $("#hokya").hide(); 
      $('#login-modal').modal('show'); 
      $('form [id=nm_sekolah]').val(a); 
      $('form [id=email]').val(a); 
      $('form [id=telp]').val(a); 
      $('form [id=alamat]').val(a); 
      $('form [id=penanggung_jawab]').val(a); 
     } 
    } 

}); }

+0

내 코드 예제를 만들어 주시겠습니까? @jam mok –

0

timeout = setTimeout(...) 문은 timeout이라는 전역 변수에 시간 제한 ID를 할당합니다. clearTimeout(timeoutvar);다른 변수 timeoutvar을 사용합니다.

변경 timeout에서 timeoutvar으로 변경하십시오.

+0

코드에서 편집 했는데도 여전히 동일한 결과를 제공합니다. –