Javascript Fetch - получает данные с сервера, когда все в порядке = ложь - PullRequest
0 голосов
/ 02 ноября 2019

Я хочу сделать запрос POST на мой сервер, используя метод fetch. Если запрос был успешным, он возвращает код состояния 200 с данными. Если произошла ошибка, он возвращает любой код состояния, кроме 200 с message.

Вот мой код JS:

class Ajax{
    static Post(url, data, success, error=null){
        const csrftoken = data["csrfmiddlewaretoken"];
        delete data["csrfmiddlewaretoken"];
        fetch(url, {
            method: "POST",
            credentials: 'same-origin',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                "X-CSRFToken": csrftoken
            },
            body: JSON.stringify(data)
        })
            .then(response => {
                const data = response.json();
                if (response.ok){
                    return data
                } else {
                    throw {"name": "ResponseNotOkError", "message": data["message"], "status": response.status};
                }
            })
            .then(success)
            .catch(err => {
                if (error !== null){
                    error(err.message, err.status); // custom function
                } else {
                    TinyText.Create(err.message); // Showing error
                }
            });
    }
}

Для отладки я вставил его в первую строкупосле моей функции ajax в моем проекте Django:

return JsonResponse({
    "message": "Blablablabla"
    }, status=400)

Я не знаю, как получить доступ к этому message.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Вы можете получить тело и код состояния, как показано ниже

fetch(url)
  .then(async (res) => ({
    status: res.status,
    body: await res.json()
  })).then(({ status, body }) => {
    console.log(status); // this is the status code
    console.log(body);   // this is json body 
  });
0 голосов
/ 02 ноября 2019

Вы хотите проверить код состояния, если его не было 200, тогда выбросьте сообщение. После выдачи ошибки перейдите в оператор catch.

.then(response => {
            const data = response.json();
            if (response.status != 200)
                throw{"message": data.message}
            // ...  Carry on
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...