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

selectel56

Client
Регистрация
11.12.2016
Сообщения
102
Реакции
54
Баллы
28
Версия зенки 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 код в браузер улетает и кубик не дожидается ответа? Как исправить? В консоли код выполняется всегда корректно с первого раза. Ссылки в коде меняйте на свои, это обычный пост запрос, привел для примера, на всех серверах одинаково ведет себя этот код.
 
fetch асинхронный. В then результат складывать нужно в какое-то общее место, в window например. А дальше периодически вызывать js из zp и проверять на наличие в этом window ответа
 
Версия зенки 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";
 

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