setTimout () ajax-запрос не работает успешно - PullRequest
1 голос
/ 08 июля 2019

В коде ниже строки

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 ]

7 голосов
/ 08 июля 2019

setTimeout принимает функцию, которую вызывает после истечения задержки.

setTimeout(Comet_IrsaliyeBelgeDurum(sGuid, belgeOid), 10000);
           ^---------------------------------------^
                      this got evaluated

То, что делает ваш код, вызывает Comet_IrsaliyeBelgeDurum и использует возвращаемое значение, каким бы оно ни было, в качестве «функции» для setTimeout.

Что вам нужно сделать, это просто обернуть это в другую функцию следующим образом:

setTimeout(function(){
  Comet_IrsaliyeBelgeDurum(sGuid, belgeOid)
}, 10000);
3 голосов
/ 08 июля 2019

Проблема в том, как вы вызываете setTimeout:

setTimeout(Comet_IrsaliyeBelgeDurum(sGuid, belgeOid), 10000);

Javascript - это язык передачи по значению.Это означает, что все передаваемые вами параметры оцениваются до того, как они переданы функции.

Это означает, что вы передаете значения Comet_IrsaliyeBelgeDurum(sGuid, belgeOid) и 10000 в setTimeout.Затем вызывается функция Comet_IrsaliyeBelgeDurum.

. То, что вы хотите сделать, это передать функцию (не результат функции) в setTimeout.См. Ответ Джозефа для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...