@spam said in Как пользоваться группами в базе данных?:
используйте часть id данных в одном потоке, а другую часть id во втором потоке
Спасибо!
Как реализовать, подскажите? Обычным образом как в блоке "Выполнить код" - не работает.
[[THE_NAME]] = 'test'
@centerdevs said in Кубик Яваскрипт - запись данных в переменную БАС:
Как реализовать, подскажите? Обычным образом как в блоке "Выполнить код" - не работает.
[[THE_NAME]] = 'test'
Должно работать, что у вас за js код?
let open = XMLHttpRequest.prototype.open;
// Overwrite the native method
XMLHttpRequest.prototype.open = function() {
// Assign an event listener
this.addEventListener("load", function(){
document.getElementById("demo3").innerHTML = 'some value';
[[ANAME]] = 'some value';
}, false);
// Call the stored reference to the native method
open.apply(this, arguments);
};
В итоге ANAME равен null. Естественно само событие я вызываю в браузере совершая ajax запрос, и убеждаюсь что всё прошло успешно по innerHTML
@centerdevs said in Кубик Яваскрипт - запись данных в переменную БАС:
let open = XMLHttpRequest.prototype.open; // Overwrite the native method XMLHttpRequest.prototype.open = function() { // Assign an event listener this.addEventListener("load", function(){ document.getElementById("demo3").innerHTML = 'some value'; [[ANAME]] = 'some value'; }, false); // Call the stored reference to the native method open.apply(this, arguments); };В итоге ANAME равен null. Естественно само событие я вызываю в браузере совершая ajax запрос, и убеждаюсь что всё прошло успешно по innerHTML
Добавьте ожидание через await
@centerdevs said in Кубик Яваскрипт - запись данных в переменную БАС:
SyntaxError: await is only valid in async functionА подскажите куда именно async распихать надо чтобы заработало? Добавляю в начале функций - не помогает.
Так, погодите, вы переопределяете метод open, вешаете обработчик и вызываете функцию. Зачем вы в обработчик помещаете этот код?:
document.getElementById("demo3").innerHTML = 'some value';
[[ANAME]] = 'some value';
Судя по всему вы используете скрипт для прослушивания событий AJAX на глобальном уровне
https://www.tutorialclues.com/topics/javascript/examples/listening-to-ajax-events-at-a-global-level
// Store a reference to the native method
let open = XMLHttpRequest.prototype.open;
// Overwrite the native method
XMLHttpRequest.prototype.open = function() {
// Assign an event listener
this.addEventListener("load", event => console.log(XHR), false);
// Call the stored reference to the native method
open.apply(this, arguments);
};
Но к чему тогда изменять значение элемента по id? Какой результат вы хотите достичь?
@Fox Это просто для себя для отладки) Чтобы явно понимать когда событие отработало, так как запись в переменную мне пока что не далась.
По самому скрипту и его назначению, всё правильно поняли. Я хочу ловить все события ajax в документе, и по окончанию загрузки записывать в переменные инфу.
@centerdevs said in Кубик Яваскрипт - запись данных в переменную БАС:
@Fox Это просто для себя для отладки) Чтобы явно понимать когда событие отработало, так как запись в переменную мне пока что не далась.
По самому скрипту и его назначению, всё правильно поняли. Я хочу ловить все события ajax в документе, и по окончанию загрузки записывать в переменные инфу.
Эмм.. Вы же понимаете, что такое "обработчик событий"? Смотрите, ваш код при каждом ajax запросе регистрирует обработчик события "load", это событие происходит, когда ресурс завершил загрузку. При этом вы устанавливаете статичный способ проверки, то есть если, скажем сайт отправит 10 ajax запросов, то как только вернётся хотя бы один, то код
document.getElementById("demo3").innerHTML = 'some value';
сработает и вы уведите изменение. При этом остальные запросы могут висеть или завершится ошибкой.
Я бы посоветовал использовать счётчик, сколько отправлено и сколько завершено запросов.
Судя по вашим сообщениям в других темах, я так понимаю вы хотите создать универсальный инструмент ожидания загрузки страницы? В таком случае есть несколько моментов.
Во первых почему именно ajax? Страница может загружать компоненты разными способами, ваш код не сработает если, например, загрузку компонентов прописали тегами и коде в html
<script type="тип" src="URL"></script>
также ajax запросы могут быть созданы без использования метода XMLHttpRequest, например через fetch
fetch(
'http://domain/service',
{ method: 'GET' }
)
.then( response => response.json() )
.then( json => console.log(json) )
.catch( error => console.error('error:', error) );
@Fox Всё верно на счёт задачи ( универсальный инструмент ожидания загрузки страницы ), а на счёт множества запросов... именно счётчик и планировал делать, а кидал в том виде просто как пример) На данный момент вижу более менее стабильную работу, за исключением ajax. А теперь оказалось что и fetch.
Но уже глягул, можно так же "вклиниться" во все fetch запросы с помощью такого
var oldFetch = fetch; // must be on the global scope
fetch = function(url, options) {
var promise = oldFetch(url, options);
// Do something with the promise
return promise;
}
Вопрос с тем как прописывать в БАС переменные из этого кода еще не решил
@centerdevs said in Кубик Яваскрипт - запись данных в переменную БАС:
@Fox Всё верно на счёт задачи ( универсальный инструмент ожидания загрузки страницы ), а на счёт множества запросов... именно счётчик и планировал делать, а кидал в том виде просто как пример) На данный момент вижу более менее стабильную работу, за исключением ajax. А теперь оказалось что и fetch.
Но уже глягул, можно так же "вклиниться" во все fetch запросы с помощью такого
var oldFetch = fetch; // must be on the global scope fetch = function(url, options) { var promise = oldFetch(url, options); // Do something with the promise return promise; }
Опять же, вы умеете работать с промисами? Плюс учтите, что вам это всё нужно использовать до загрузки страницы через действие "Выполнять при каждой загрузке страницы в браузере".
Только всё это один фиг не поможет, данные можно загружать и через вебсокеты, или, например фреймы
<iframe src="URL">...</iframe>
Тут важно понимать конечную цель, что вы хотите сделать в итоге (в идеале)? Для чего?
Определение "универсальный инструмент ожидания загрузки страницы" слишком расплывчатое, например при переходе на сайт видео-хостинга, нужно ли ждать завершения загрузки всего ролика до конца? Далеко не все мультимедиа компоненты являются обязательными для работы с сайтом.
Или сайты с кучей рекламы, вы наверняка такие встречали, которые крутят рекламу по кругу, они ни когда не загрузятся до конца.
@centerdevs , может зарелизишь, как лайфхак. Возможно, кто-то ещё от себя добавит что-то в код.
@Fox С промисами умею работать совсем не много, но есть гугл и не должно быть проблемой. Конечная цель - получить более адекватный и быстрый ожидатель загрузки) Он не будет панацеей во всех случаях, но как минимум 99% моих требований закроет + будет иметь доп настройки чтобы можно было его немного подправлять в особых ситуациях.
"Выполнять при каждой загрузке страницы в браузере" - естественно! :) Всё уже проверил, событие ловит)
На счёт видео, скриптов и прочего - это уже частные случаи которые будут обрабатываться в частном порядке или настройками функции ожидателя.
@centerdevs said in Кубик Яваскрипт - запись данных в переменную БАС:
@Fox С промисами умею работать совсем не много, но есть гугл и не должно быть проблемой. Конечная цель - получить более адекватный и быстрый ожидатель загрузки) Он не будет панацеей во всех случаях, но как минимум 99% моих требований закроет + будет иметь доп настройки чтобы можно было его немного подправлять в особых ситуациях.
"Выполнять при каждой загрузке страницы в браузере" - естественно! :) Всё уже проверил, событие ловит)
Все эти телодвижения уйдут лесом при простом востановлении объекта window
var i = document.createElement('iframe');
i.style.display = 'none';
document.body.appendChild(i);
window = i.contentWindow;
i.parentNode.removeChild(i);
Придумал костыль на этот случай. Может кому пригодится.
Использую обьект window.
Например window.my_var_name = "blabla"
А далее в другом месте проекта с помощью кубика яваскрипт привязываю значение из window.my_var_name в переменную баса.