Как сделать, чтобы при срабатывание функции ajax, которая добавляет новые элементы на страницу, запускались функции из других скриптов. Скрипты находятся в разных файлах. Спасибо)
В jQuery есть такие функции, как .ajaxStart()
и .ajaxComplete()
.
$(document).ajaxStart(function() {
console.log('Эта функция будет вызвана при отправке нового ajax запроса.');
});
$(document).ajaxComplete(function() {
console.log('Эта функция будет вызвана при завершении любого ajax запроса.');
});
Вы можете использовать функции jQuery ajaxSuccess
(будет срабатывать при каждом успешном результате),
либо при помощи функции ajaxComplete
(при каждом результате, неважно успешен он или нет).
Но я всё же полагаю, что вам полезно будет определять URL вызова и в зависимости от него что-то осуществлять. Решение для абсолютно всех Ajax — очень хрупкое.
$(document).ajaxSuccess(function(event, xhr, settings) {
if (settings.url === '/some/url/here') {
// какой-то код обработки
// получение результатов Ajax
console.log(xhr.responseText);
}
});
(function() {
var origOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
this.addEventListener("load", function() {
if (this.responseURL == "some/url/here") {
// какой-то код обработки
// получение результатов Ajax
console.log(xhr.responseText);
}
});
origOpen.apply(this, arguments);
};
})();
Реализовать паттерн Наблюдатель. Все функции регистрируются как Наблюдатели. В обработчике ajax запроса информировать всех наблюдателей.
// Паттерн Наблюдатель (укороченный вариант)
function ObserverList(){
this.observerList = [];
};
ObserverList.prototype.Add = function( obj ){
return this.observerList.push( obj );
};
ObserverList.prototype.Count = function(){
return this.observerList.length;
};
ObserverList.prototype.Get = function( index ){
if( index > -1 && index < this.observerList.length ){
return this.observerList[ index ];
}
};
function Subject(){
this.observers = new ObserverList();
};
Subject.prototype.AddObserver = function( observer ){
this.observers.Add( observer );
};
Subject.prototype.Notify = function(){
var observerCount = this.observers.Count();
for(var i=0; i < observerCount; i++){
this.observers.Get(i)();
}
};
// Вариант использования. Создаем объект за которым будем наблюдать
var s = new Subject();
// Предположим - это две функции из разных модулей и мы хотим их вызвать:
var f1 = function() {
console.log("function 1");
};
var f2 = function() {
console.log("function 2");
};
//Добавляем их как Наблюдателей за нашим объектом:
s.AddObserver(f1);
s.AddObserver(f2);
// Когда приходит время уведомляем
s.Notify();
Как сделать так, что бы данный код повторялся по своему истечению (10 секунд), ну то есть зациклить надо его Пробовал через setInterval(startCountdown, 10000);...