在该行下面的代码中
setTimeout(Comet_IrsaliyeBelgeDurum(sGuid, belgeOid), 10000)
不会使彗星功能等待10秒。 该功能正在连续运行。
setTimeout参数似乎无效。
如何让代码等待10秒?
function Comet_IrsaliyeBelgeDurum(sGuid, belgeOid) {
var params = {
sGuid: sGuid,
belgeOid: belgeOid
}
$.ajax({
type: "post",
dataType: "json",
data: params,
url: '/BetonHareketler/H_BetonIrsaliyeBelgeDurum',
success: function (data) {
if (data.isSuccess) {
if (data.entity == 2 || data.entity == 4) {
toastr.success(data.SuccessfullMessage, 'İşlemi Başarılı');
}
else {
toastr.info(data.SuccessfullMessage, 'İşlemi Başarılı');
setTimeout(Comet_IrsaliyeBelgeDurum(sGuid, belgeOid), 10000);
}
}
else {
toastr.error(data.SuccessfullMessage, 'İşlemi Başarısız');
}
},
error: function (xhr, ajaxOptions, thrownError) {
alert("Bağlantı Hatası. Sayfaya Yenileyin");
window.location.replace(window.location.href);
}
});
}
答案 0 :(得分:7)
setTimeout
接受延迟结束后调用的函数。
setTimeout(Comet_IrsaliyeBelgeDurum(sGuid, belgeOid), 10000);
^---------------------------------------^
this got evaluated
您的代码正在执行的操作是调用Comet_IrsaliyeBelgeDurum
并将其返回值(无论它是什么)用作setTimeout
的“函数”。
您需要做的就是将其包装在另一个函数中,如下所示:
setTimeout(function(){
Comet_IrsaliyeBelgeDurum(sGuid, belgeOid)
}, 10000);
答案 1 :(得分:3)
问题是您调用setTimeout的方式:
Comet_IrsaliyeBelgeDurum(sGuid, belgeOid)
JavaScript是一种按值传递的语言。这意味着您传递的所有参数在被赋值给函数之前都会被评估。
这意味着您要将值10000
和Comet_IrsaliyeBelgeDurum
传递给setTimeout。然后调用函数setTimeout
。
您要做的是将一个函数(而不是函数的结果)传递给f2 frm = new f2();
frm.ShowDialog(this);
MessageBox.Show(frm.proc); // frm.proc is variable public in Form2
。有关示例,请参见约瑟夫的答案。