Size: a a a

JavaScript — русскоговорящее сообщество

2020 February 20

M

Michael in JavaScript — русскоговорящее сообщество
хотя толку в этом 0
источник

AK

Anvar Khamidov in JavaScript — русскоговорящее сообщество
Коллеги, добрый день. Я бэкенд разработчик, по js не особо шарю. Прошу помочь кое в чем. Задача, после запроса DELETE с помощью fetch, мне нужно сделать редирект на другую страничку. сделал так:

<script>
   function deleteRole() {
       var select = document.getElementById("id_roles");
       var role = select.options[select.selectedIndex].value;
       var url = "{% url 'delete-permissions' tool_name=obj.name %}";
       fetch(url, {method: 'DELETE', headers: {
                                               'Content-Type': 'application/json;charset=utf-8'
                                               },
             body: JSON.stringify({role: role})}).then(res => res.json()).then(result => console.log(result));
       location.href="{% url 'admin:index' %}";
   }
</script>

Но редирект выполняется, а запрос нет, в чем может быть проблема?
TypeError: NetworkError when attempting to fetch resource.
источник

AK

Anvar Khamidov in JavaScript — русскоговорящее сообщество
Решил проблему поставив таймаут.
источник

SM

Sergey Minichev in JavaScript — русскоговорящее сообщество
Как можно сравнить два объекта, если в них есть рекурсивные ссылки? Я пробовал кэшировать, но кэш не сохраняется, потому что функция, результат которой записывается в кэш, ни разу не дошла до конца :( (функция обхода объекта тоже с рекурсией)
источник

OR

Oleg Rizhkov in JavaScript — русскоговорящее сообщество
Anvar Khamidov
Решил проблему поставив таймаут.
Fetch возвращает промис.
fetch.then(() => {твой код})
источник

AK

Anvar Khamidov in JavaScript — русскоговорящее сообщество
Oleg Rizhkov
Fetch возвращает промис.
fetch.then(() => {твой код})
То есть после запроса он и редиректится? У меня такой вопрос, таймаут то стоит, а что если время ожидания будет больше и запрос не выполнится?
источник

B

Baxxter in JavaScript — русскоговорящее сообщество
Sergey Minichev
Как можно сравнить два объекта, если в них есть рекурсивные ссылки? Я пробовал кэшировать, но кэш не сохраняется, потому что функция, результат которой записывается в кэш, ни разу не дошла до конца :( (функция обхода объекта тоже с рекурсией)
что значит "не дошла до конца"?
источник

SM

Sergey Minichev in JavaScript — русскоговорящее сообщество
Baxxter
что значит "не дошла до конца"?
ну она рекурсивная, и крутится по кругу
источник

SM

Sergey Minichev in JavaScript — русскоговорящее сообщество
в итоге переполняется стэк вызова
источник

OR

Oleg Rizhkov in JavaScript — русскоговорящее сообщество
Anvar Khamidov
То есть после запроса он и редиректится? У меня такой вопрос, таймаут то стоит, а что если время ожидания будет больше и запрос не выполнится?
Ну вообще ничего. Js однопоточный, и хоть ты 0 на таймауте поставишь - он выполниться всегда после.
источник

🌀

🌀 through a haze 🌀 in JavaScript — русскоговорящее сообщество
Anvar Khamidov
Коллеги, добрый день. Я бэкенд разработчик, по js не особо шарю. Прошу помочь кое в чем. Задача, после запроса DELETE с помощью fetch, мне нужно сделать редирект на другую страничку. сделал так:

<script>
   function deleteRole() {
       var select = document.getElementById("id_roles");
       var role = select.options[select.selectedIndex].value;
       var url = "{% url 'delete-permissions' tool_name=obj.name %}";
       fetch(url, {method: 'DELETE', headers: {
                                               'Content-Type': 'application/json;charset=utf-8'
                                               },
             body: JSON.stringify({role: role})}).then(res => res.json()).then(result => console.log(result));
       location.href="{% url 'admin:index' %}";
   }
</script>

Но редирект выполняется, а запрос нет, в чем может быть проблема?
TypeError: NetworkError when attempting to fetch resource.
судя по ошибке и описанию, то какая-то проблема с сетью, запрос не проходит
источник

🌀

🌀 through a haze 🌀 in JavaScript — русскоговорящее сообщество
а после этого уже выполняется редирект
источник

B

Baxxter in JavaScript — русскоговорящее сообщество
Sergey Minichev
в итоге переполняется стэк вызова
ну значит надо сделать чтобы не вызывалась бесконечно
источник

AK

Anvar Khamidov in JavaScript — русскоговорящее сообщество
Oleg Rizhkov
Ну вообще ничего. Js однопоточный, и хоть ты 0 на таймауте поставишь - он выполниться всегда после.
Вот в том то и дело что странно, после запроса должно все происходить, но похоже специфика fetch может быть в чем то, так как запрос не проходит а редирект выполняется
источник

🌀

🌀 through a haze 🌀 in JavaScript — русскоговорящее сообщество
Anvar Khamidov
Вот в том то и дело что странно, после запроса должно все происходить, но похоже специфика fetch может быть в чем то, так как запрос не проходит а редирект выполняется
запрос не выполнился по какой-то причине, но дальше выполнение всегда попадет в .then, вам надо внутри этого .then проверить код ответа и или сгенерировать ошибку или выполнить редирект
источник

🌀

🌀 through a haze 🌀 in JavaScript — русскоговорящее сообщество
+ у вас вообще редирект сразу после fetch стоит
источник

AK

Anvar Khamidov in JavaScript — русскоговорящее сообщество
🌀 through a haze 🌀
запрос не выполнился по какой-то причине, но дальше выполнение всегда попадет в .then, вам надо внутри этого .then проверить код ответа и или сгенерировать ошибку или выполнить редирект
сейчас добавил .then() выполняется все как нужно
источник

AK

Anvar Khamidov in JavaScript — русскоговорящее сообщество
🌀 through a haze 🌀
+ у вас вообще редирект сразу после fetch стоит
Это не хорошо?
источник

🌀

🌀 through a haze 🌀 in JavaScript — русскоговорящее сообщество
а fetch асинхронный, он не будет дожидаться ответа
источник

AK

Anvar Khamidov in JavaScript — русскоговорящее сообщество
🌀 through a haze 🌀
а fetch асинхронный, он не будет дожидаться ответа
Ага, вот теперь понятно
источник