Javascript endReqeustHandler - PullRequest
       0

Javascript endReqeustHandler

1 голос
/ 23 декабря 2011

Я хочу вызывать некоторые функции javascript после всех вызовов ajax.Я знаю, как вызывать функции внутри каждого отдельного вызова ajax, как показано ниже:

function xyz()
{

if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
     document.getElementById("links").innerHTML=xmlhttp.responseText;

     *****javacsript would go here*****
   }

 xmlhttp.open("GET","xhr_php/site_links.php",true);
 xmlhttp.send();
 }
 }

Итак, еще раз, я знаю, как вызывать его после или внутри каждого вызова ajax, как показано выше.Но мне интересно, есть ли функция, которая будет вызывать функции после всех / любых вызовов ajax.Таким образом, мне не нужно писать javascript внутри каждого вызова ajax.Я думаю, что это как-то связано с обработчиком запросов, но не уверен, как это написано в php / javascript.Я нашел кое-что в Интернете, поскольку это относится к asp.net, но я использую php.

Id также как способ вызова функций в начале вызова ajax или перед вызовом ajax.

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

Спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Вы можете использовать функцию обратного вызова:

function xyz(callback) {
    var xmlhttp;
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            callback(this);
        }

    }
    xmlhttp.open("GET", "xhr_php/site_links.php", true);
    xmlhttp.send();
}

Тогда:

xyz( function( xhr ) {

    alert( xhr.responseText );

});
0 голосов
/ 23 декабря 2011

Вы можете централизовать вызовы Ajax, используя одну функцию или объект, и перед выполнением любого вызова ajax вы можете вставить любую функцию в глобальный стек (массив).

global_callbacks.push(function(){alert('');});

Ваш центральный абонент ajax может вызывать все функции в стеке.

var global_callbacks = [];

function xyz() {
    var xmlhttp;
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            for(var i=0; i < global_callbacks.length; ++i)
                 global_callbacks[i]();
        }

    }
    xmlhttp.open("GET", "xhr_php/site_links.php", true);
    xmlhttp.send();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...