JQuery ajax Функция успешно запускается только в конце каждой функции - PullRequest
0 голосов
/ 02 мая 2020

В моей функции jQuery элементы в каждой строке таблицы загружаются следующим способом. Вместо того, чтобы работать с каждой строкой, команда изменения цвета, выполненная в разделе успеха, работает после завершения всех процессов. Что я должен сделать, чтобы он работал после каждой загрузки? Я думаю, что это связано с Thread.Sleep (1000). но сайт, где я скачал файл, хочет 1 секунду между каждым запросом.

здесь моя функция qjuery

        $.each($("tr[class='sec']"), function () {
        if ($(this).children('td:eq(1)').children("input[type='checkbox']").prop('checked')) {
            durum = $(this);
            var beyan = {};
            var secililer = [];
            beyan.Id = $(this).attr("id");
            beyan.TahakkukId = $(this).data("id");
            beyan.KisaKod = $(this).children('td:eq(2)').html();
            beyan.BeyannameTuru = $(this).children('td:eq(4)').html();
            beyan.Ay = $(this).children('td:eq(5)').html().substring(8, 10);
            beyan.Yil = $(this).children('td:eq(5)').html().substring(11, 16);
            secililer.push(beyan);
            $.ajax({
                url: '/Ebeyan/BelgeAl',
                type: "POST",
                dataType: "text",
                async: false,
                contentType: 'application/json; charset=utf-8',
                data: JSON.stringify({ secililer, islemler, token, }),
                success: function (data) {
                    Indirildi(durum);

                }
            });


        }
    });
function Indirildi(gelen) {
    gelen.css('background-color', 'green');
    gelen.children('td:eq(8)').html("İndirildi");
}

здесь размещен контроллер

 public async Task<string> BelgeAl(List<Beyanname> secililer, List<Islem> islemler, string token)
{
    bool indir = true;
    bool yazdir = false;
    bool gonder = false;
    foreach (var islem in islemler)
    {
        if (islem.IslemTuru == "cbyazdir")
        {
            yazdir = true;
        }
        if (islem.IslemTuru == "cbgonder")
        {
            gonder = true;
        }
    }
    foreach (var GelenBeyan in secililer)
    {
        string YolAdi = YolHazirla(GelenBeyan);
        string DosyaAdi = DosyaAdiHazirla(GelenBeyan);

        await dosyaindir(token, YolAdi + "/" + DosyaAdi, "Beyan", GelenBeyan.Id, "");
        await dosyaindir(token, YolAdi + "/" + DosyaAdi, "Tahakkuk", GelenBeyan.Id, GelenBeyan.TahakkukId);

    }
    return "";
}

и здесь моя загрузка asyn c method

        public async System.Threading.Tasks.Task<Boolean> dosyaindir(string token, string yol, string tur, string id, string thkid)
    {

        string URI = "https://ebeyanname.gib.gov.tr/dispatch?";
        string myParameters = "cmd=IMAJ&subcmd=";
        if (tur == "Beyan")
        {
            myParameters += "BEYANNAMEGORUNTULE";
        }
        else
        {
            myParameters += "TAHAKKUKGORUNTULE&tahakkukOid=" + thkid;
        }
        myParameters += "&TOKEN=" + token;
        myParameters += "&beyannameOid=" + id;
        myParameters += "&inline=true";
        HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(string.Concat(URI + myParameters));
        Req.CookieContainer = Cc;
        Req.Method = "GET";
        Req.ContentType = "application/pdf;charset=ISO-8859-9";
        HttpWebResponse Res = (HttpWebResponse)Req.GetResponse();
        Req.KeepAlive = false;
        Req.ProtocolVersion = HttpVersion.Version11;
        Req.ServicePoint.ConnectionLimit = 1;
        Stream dosya = Res.GetResponseStream();
        yol += tur + ".pdf";
        using (var fs = System.IO.File.Create(yol))
        {
            dosya.CopyTo(fs);
        }
        Res.Close();
        Req.Abort();
        Thread.Sleep(1000);     
        return true;
    }

ОБНОВЛЕНИЕ Я только сейчас попробую удалить

Thread.Sleep(1000); 

и использовать эту функцию, но ничего не меняется

 $.each($("tr[class='sec']"), function () {
        if ($(this).children('td:eq(1)').children("input[type='checkbox']").prop('checked')) {
            durum = $(this);
            var beyan = {};
            var secililer = [];

            setTimeout(function () {

            }, 1000);




            beyan.Id = $(this).attr("id");
            beyan.TahakkukId = $(this).data("id");
            beyan.KisaKod = $(this).children('td:eq(2)').html();
            beyan.BeyannameTuru = $(this).children('td:eq(4)').html();
            beyan.Ay = $(this).children('td:eq(5)').html().substring(8, 10);
            beyan.Yil = $(this).children('td:eq(5)').html().substring(11, 16);
            secililer.push(beyan);
            $.ajax({
                url: '/Ebeyan/BelgeAl',
                type: "POST",
                dataType: "text",
                async: false,
                contentType: 'application/json; charset=utf-8',
                data: JSON.stringify({ secililer, islemler, token, }),
                success: function (data) {
                   durum.css('background-color', 'green');
                   durum.children('td:eq(8)').html("İndirildi");

                }
            });


        }
    });

1 Ответ

0 голосов
/ 03 мая 2020

Я нахожу свое решение в здесь Я удаляю каждую функцию и помещаю код в функцию с SetTimeOut

 (function IslemYap() {
        i++;
        satir = $("tr[class='sec']:eq(" + i + ")");
        if (satir.children('td:eq(1)').children("input[type='checkbox']").prop('checked')) {                
            sayi++;
            var beyan = {};
            var secililer = [];
            beyan.Id = satir.attr("id");
            beyan.TahakkukId = satir.data("id");
            beyan.KisaKod = satir.children('td:eq(2)').html();
            beyan.BeyannameTuru = satir.children('td:eq(4)').html();
            beyan.Ay = satir.children('td:eq(5)').html().substring(8, 10);
            beyan.Yil = satir.children('td:eq(5)').html().substring(11, 16);
            secililer.push(beyan);
            $.ajax({
                url: '/Ebeyan/BelgeAl',
                type: "POST",
                dataType: "text",
                async: false,
                contentType: 'application/json; charset=utf-8',
                data: JSON.stringify({ secililer, islemler, token, }),
                success: function (data) {
                    console.log(sayi);
                    satir.css('background-color', 'green');
                    satir.children('td:eq(8)').html(data);
                    $("#pb").width(pbdurum + "%")
                    pbdurum += oran;
                }
            });
        }
        if (i < toplamsayi) {
            setTimeout(IslemYap, 100);
        }

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