Кубик js ведет себя странно при выполнении fetch, как исправить?

selectel56

Client
Регистрация
11.12.2016
Сообщения
98
Благодарностей
48
Баллы
18
Версия зенки 7.7.1.0 + cef ХРОМ + js кубик
--------------------------------------------------

В браузере хватаем через панель разработчика фетч код для запроса на сервер:

C#:
fetch("https://xxx.gg.ru/misk/leo", {
  "headers": {
    "accept": "application/json, text/javascript, */*; q=0.01",
    "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "sec-ch-prefers-color-scheme": "light",
    "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-requested-with": "XMLHttpRequest"
  },
  "referrer": "https://pass.gg.ru/",
  "referrerPolicy": "origin",
  "body": "token=27bae141168&process=MISSGO",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});
Далее модифицируем, чтобы получить ответ в переменную result11.

C#:
fetch("https://xxx.gg.ru/misk/leo", {
  "headers": {
    "accept": "*/*",
    "accept-language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.2",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-requested-with": "XMLHttpRequest"
  },
  "referrer": "https://pass.gg.ru/",
  "referrerPolicy": "same-origin",
  "body": "token=27bae141168&process=MISSGO",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
})
.then(response => response.text())
.then(data => {
  result11 = data;
  console.log('Ответ от сервера:', result11);
})
.catch(error => console.error('Ошибка:', error));
return result11;
И тут при выполнении на странице прикол: стабильно при выполнении первого раза кубик шлет нафик красным крестиком, делаем сразу попытку 2 - result11 заполняется ответом сервера. Думал может result11 заранее не обьявил, добьявлял и заранее - толку ноль. Получается чтобы получить ответ от сервера нужно 2 раза сделать запрос, первый раз кубик выдает неудачное выполнение, но фактически запрос на сервер уходит смотря по монитору трафика, а бывает критически нельзя так делать 2 запроса, чтобы получить нужный ответ.

Вопрос: как сделать так, чтобы ответ ложился в переменную сразу? Делал js код с ожиданием ответа от сервера, толку ноль, запрос улетает, ответ по монитору приходит, переменная пустая. Думал может js код в браузер улетает и кубик не дожидается ответа? Как исправить? В консоли код выполняется всегда корректно с первого раза. Ссылки в коде меняйте на свои, это обычный пост запрос, привел для примера, на всех серверах одинаково ведет себя этот код.
 

Carty

Client
Регистрация
16.06.2021
Сообщения
39
Благодарностей
66
Баллы
18
fetch асинхронный. В then результат складывать нужно в какое-то общее место, в window например. А дальше периодически вызывать js из zp и проверять на наличие в этом window ответа
 

ZennoCat

Client
Регистрация
06.01.2020
Сообщения
35
Благодарностей
8
Баллы
8
Версия зенки 7.7.1.0 + cef ХРОМ + js кубик
--------------------------------------------------

В браузере хватаем через панель разработчика фетч код для запроса на сервер:

C#:
fetch("https://xxx.gg.ru/misk/leo", {
  "headers": {
    "accept": "application/json, text/javascript, */*; q=0.01",
    "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "sec-ch-prefers-color-scheme": "light",
    "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-requested-with": "XMLHttpRequest"
  },
  "referrer": "https://pass.gg.ru/",
  "referrerPolicy": "origin",
  "body": "token=27bae141168&process=MISSGO",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});
Далее модифицируем, чтобы получить ответ в переменную result11.

C#:
fetch("https://xxx.gg.ru/misk/leo", {
  "headers": {
    "accept": "*/*",
    "accept-language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.2",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-requested-with": "XMLHttpRequest"
  },
  "referrer": "https://pass.gg.ru/",
  "referrerPolicy": "same-origin",
  "body": "token=27bae141168&process=MISSGO",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
})
.then(response => response.text())
.then(data => {
  result11 = data;
  console.log('Ответ от сервера:', result11);
})
.catch(error => console.error('Ошибка:', error));
return result11;
И тут при выполнении на странице прикол: стабильно при выполнении первого раза кубик шлет нафик красным крестиком, делаем сразу попытку 2 - result11 заполняется ответом сервера. Думал может result11 заранее не обьявил, добьявлял и заранее - толку ноль. Получается чтобы получить ответ от сервера нужно 2 раза сделать запрос, первый раз кубик выдает неудачное выполнение, но фактически запрос на сервер уходит смотря по монитору трафика, а бывает критически нельзя так делать 2 запроса, чтобы получить нужный ответ.

Вопрос: как сделать так, чтобы ответ ложился в переменную сразу? Делал js код с ожиданием ответа от сервера, толку ноль, запрос улетает, ответ по монитору приходит, переменная пустая. Думал может js код в браузер улетает и кубик не дожидается ответа? Как исправить? В консоли код выполняется всегда корректно с первого раза. Ссылки в коде меняйте на свои, это обычный пост запрос, привел для примера, на всех серверах одинаково ведет себя этот код.
внутри then напиши window.result = data;
а return можно не делать
далее следующим js кубиком проверяй глобальную переменную c помощью return window.result; пока в ней не появится какой либо результат
можно сделать это в цикле так как бывает что ответ приходит с задержкой.
А в catch блоке как вариант можно записать window.result = "false";
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)