Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   $.ajax переписать на fetch (https://javascript.ru/forum/misc/84642-%24-ajax-perepisat-na-fetch.html)

TheSanches 07.11.2022 12:20

$.ajax переписать на fetch
 
Как переписать отправку формы написанную на jQuery, используя fetch

function messagesFromBase() {

        var subjectId = 2;
        var lastName = 'text';
        var firstName = 'text';
        var thirdName = 'text';
        var companyName = 'text';
        var response = {};
        $.ajax({
            async: false,
            type: "POST",
            dataType: 'json',
            charset: 'windows-1251',
            url: "url-base",
            data: {
                subjectId: subjectId,
                lastName: lastName,
                firstName: firstName,
                thirdName: thirdName,
                companyName: companyName
            },
            success: function (resp) {
                response = resp;
            },
            error: function (jqXHR, status, e) {
                response = false;
            },
        });
        return response;
    }

voraa 07.11.2022 14:36

async: false, не пройдет. fetch всегда асинхронный
Про windows-1251 тоже сомневаюсь. Обычно все в utf-8

TheSanches 07.11.2022 15:02

Накатал такой вариант, в консоль выводит полученные массивы, но сам return response? не заполняет необходимые поля при вызове функции

async function messagesFromBase() {
        var subjectId = 2;
        var lastName = 'text';
        var firstName = 'text';
        var thirdName = 'text';
        var companyName = 'text';
        var response = {};
        var dataB = new FormData();
        dataB.append('subjectId', subjectId);
        dataB.append('lastName', lastName);
        dataB.append('firstName', firstName);
        dataB.append('thirdName', thirdName);
        dataB.append('companyName', companyName);

        try {
            const resp = await fetch("url-base", {
                method: 'POST',
                body: dataB
            });
            response = await resp.json();

        } catch (error) {
            console.log('Ошибка:', error);
        }

        console.log(response)
        return response;
    }

рони 07.11.2022 15:10

TheSanches,
сделайте вызов функции что у вас там заполняет в строке 21 пост #3

TheSanches 07.11.2022 15:15

В рабочем варианте я должен получать массивы с базы
{messageCount: 9, log: Array(9), ticketId: 11620, null: null}

На основании этих данных рисую верстку

TheSanches 07.11.2022 15:22

пост #1
Полностью рабочий, но из-за async: false, не могу установить время ожидания ответа сервера, И если серв. не отвечает, все виснет. Поэтому питаюсь переписать на fetch

ksa 07.11.2022 15:42

Цитата:

Сообщение от TheSanches
но сам return response? не заполняет необходимые поля при вызове функции

async-функция возвращает промис.
Нужно писать
messagesFromBase(...)
   .then(res => {
      // тут будет ответ для заполнения полей
   })
   .catch(err => {
      // тут ошибка
   })


Часовой пояс GMT +3, время: 07:44.