setTimout()ajax请求无法成功运行

时间:2019-07-08 17:57:56

标签: javascript jquery ajax

在该行下面的代码中

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

        }

2 个答案:

答案 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是一种按值传递的语言。这意味着您传递的所有参数在被赋值给函数之前都会被评估。

这意味着您要将值10000Comet_IrsaliyeBelgeDurum传递给setTimeout。然后调用函数setTimeout

您要做的是将一个函数(而不是函数的结果)传递给f2 frm = new f2(); frm.ShowDialog(this); MessageBox.Show(frm.proc); // frm.proc is variable public in Form2 。有关示例,请参见约瑟夫的答案。