在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();
}
});
}
答案 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
。