如何在成功时停止setTimeout?

时间:2016-12-08 02:44:11

标签: javascript php ajax settimeout cleartimeout

beforeSend部分,我添加了setTimeout。如果ajax超过20秒,则会显示超时消息。如果ajax在20秒之前达到成功,则setTimeout仍在运行,并显示超时消息。

如果ajax在20秒内完成,如何防止出现超时消息?

形式

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

的JavaScript

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();
        }
   });
}

2 个答案:

答案 0 :(得分:0)

我认为你可以写一个错误的回调函数,并检查状态是否超时。当然,你需要设置超时:20。

来自jquery的ajax api:

错误 类型:函数(jqXHR jqXHR,String textStatus,String errorThrown) 请求失败时要调用的函数。该函数接收三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,描述发生的错误类型的字符串和可选的异常对象(如果发生)。第二个参数的可能值(除了null)是“timeout”,“error”,“abort”和“parsererror”。发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如“Not Found”或“Internal Server Error”。从jQuery 1.5开始,错误设置可以接受一系列函数。每个函数将依次调用。注意:不会为跨域脚本和跨域JSONP请求调用此处理程序。这是一个Ajax事件。

EditorTemplates

}); }

答案 1 :(得分:0)

您的timeout = setTimeout(...)语句将超时ID分配给名为timeout的全局变量。您的clearTimeout(timeoutvar);使用不同的变量timeoutvar

timeout更改为timeoutvar