Подтвердить что ты не робот

Может ли JQuery прослушивать вызовы AJAX из другого javascript?

Мне нужно создать функцию в корзине покупок, которая использует AJAX для извлечения обновленной копии шаблона с сервера, когда что-то изменится (например, продукт будет удален). Я не могу изменить код на стороне сервера или JavaScript, который заставляет корзину покупок работать в первую очередь. (Не знаю, что знаю, но что это такое)

Что я хочу сделать, это запустить собственный JavaScript каждый раз, когда обновляется корзина. Я хочу знать, можно ли прослушивать вызовы AJAX и запускать мой код каждый раз, когда он сделан.

4b9b3361

Ответ 1

Это старый вопрос, но, возможно, этот ответ может помочь другим.

Чтобы следить за всеми вызовами ajax в HTML-документе, вы можете перезаписать прототип XMLHttpRequest. Таким образом, вы можете наблюдать за действиями над методами объектов XMLHttpRequest.

Вот небольшой пример кода:

var open = window.XMLHttpRequest.prototype.open,
    send = window.XMLHttpRequest.prototype.send,
    onReadyStateChange;

function openReplacement(method, url, async, user, password) {
    var syncMode = async !== false ? 'async' : 'sync';
    console.warn(
        'Preparing ' +
        syncMode +
        ' HTTP request : ' +
        method +
        ' ' +
        url
    );
    return open.apply(this, arguments);
}

function sendReplacement(data) {
    console.warn('Sending HTTP request data : ', data);

    if(this.onreadystatechange) {
        this._onreadystatechange = this.onreadystatechange;
    }
    this.onreadystatechange = onReadyStateChangeReplacement;

    return send.apply(this, arguments);
}

function onReadyStateChangeReplacement() {
    console.warn('HTTP request ready state changed : ' + this.readyState);
    if(this._onreadystatechange) {
        return this._onreadystatechange.apply(this, arguments);
    }
}

window.XMLHttpRequest.prototype.open = openReplacement;
window.XMLHttpRequest.prototype.send = sendReplacement;

С этим образцом для каждого вызова AJAX у вас будет предупреждение в консоли javascript.

Это не jQuery script, но вы можете использовать jQuery внутри, как хотите.

Это решение, вероятно, не будет работать на IE 6 или старше, но оно работает в FF, IE7 +, Chrome, Opera, Safari...

Ответ 2

Я бы предпочел это решение.

$(document).ajaxComplete(function(event,request, settings){
    // Your code here
});

Ответ 3

Вы не можете слушать его, но вы можете использовать плагин периодического обновления. Посмотрите ниже:

http://plugins.jquery.com/plugin-tags/periodic-updater

Ответ 4

Мой друг. Вы можете сделать это очень легко с помощью JQuery (как вы сказали, что вы используете JQuery)

(Для тех, кто не использует, они могут управлять кодом библиотеки JQuery под функцией ajax для просмотра собственного кода:))

$(document).bind("ajaxSend", function(){
   $("#loading").show();
 }).bind("ajaxComplete", function(){
   $("#loading").hide();
 });

Это фрагмент кода, взятый из официальных документов jquery api docs (см. раздел "Глобальные события" ).

https://api.jquery.com/Ajax_Events/