Как сделать, что бы при каждом ajax все функции запускались заново

941
04 января 2017, 04:17

Как сделать, чтобы при срабатывание функции ajax, которая добавляет новые элементы на страницу, запускались функции из других скриптов. Скрипты находятся в разных файлах. Спасибо)

Answer 1

В jQuery есть такие функции, как .ajaxStart() и .ajaxComplete().

$(document).ajaxStart(function() {
    console.log('Эта функция будет вызвана при отправке нового ajax запроса.');
});
$(document).ajaxComplete(function() {
    console.log('Эта функция будет вызвана при завершении любого ajax запроса.');
});
Answer 2
Отслеживание Ajax вне обработчика "success", "complete" и т.д.

jQuery

Вы можете использовать функции jQuery ajaxSuccess (будет срабатывать при каждом успешном результате),
либо при помощи функции ajaxComplete (при каждом результате, неважно успешен он или нет).

Но я всё же полагаю, что вам полезно будет определять URL вызова и в зависимости от него что-то осуществлять. Решение для абсолютно всех Ajax — очень хрупкое.

$(document).ajaxSuccess(function(event, xhr, settings) {
    if (settings.url === '/some/url/here') {
        // какой-то код обработки
        // получение результатов Ajax
        console.log(xhr.responseText);
    }
});

Альтернатива на чиcтом JavaScript

(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);
    };
})();
Answer 3

Реализовать паттерн Наблюдатель. Все функции регистрируются как Наблюдатели. В обработчике 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();
READ ALSO
jQuery DataTables - добавить строку в таблицу

jQuery DataTables - добавить строку в таблицу

Дано: MySQL, Java - сервлеты, jQuery DataTables

1177
Повторение счетчика каждые 10 секунд

Повторение счетчика каждые 10 секунд

Как сделать так, что бы данный код повторялся по своему истечению (10 секунд), ну то есть зациклить надо его Пробовал через setInterval(startCountdown, 10000);...

598