PHP ::: 2 AJAX Calls ::: 2 Responses ::: В ПОСЛЕДОВАТЕЛЬНОМ ПОРЯДКЕ - PullRequest
0 голосов
/ 18 января 2012

Этот вопрос уже задавался несколько раз, но был решен с плохими последствиями.

Плохая импликация на мой взгляд - это то, что:

Использует библиотеку, такую ​​как mootools или jquery

Использует некоторую задержку между запросами, например setTimeout ("doNext ()", 3000);

В частности, я пытаюсь добиться этого.

<div onClick="javascript:one();two();"></div>

один () и два () - AJAX

one () ДОЛЖЕН предшествовать двум ()

Ответы [ 3 ]

4 голосов
/ 18 января 2012

two(); должен вызываться в обработчике успеха ajax в one().Например:

html:

<div onClick="javascript:one();"></div>

javascript:

function one() {
    $.ajax({
        ...
        success: function() {
            setTimeout(two,3000);
        }
    });
}

function two() {
    $.ajax({
        ...
    });
}
3 голосов
/ 18 января 2012

Попробуй это !!!

function one() {
    $.ajax({
        ...
        aysnc:false,
    });
}

function two() {
    $.ajax({
        ...
        aysnc:false,
    });
}
1 голос
/ 18 января 2012

Я согласен с scessor, что вторая функция должна быть выполнена в пределах первой - в случае успеха.Вот моя AJAX-функция, без каких-либо jquery или необходимых:

    function ajax_call_1(divId, params)
    {
        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){
                if(divId!='')
                    document.getElementById(divId).innerHTML=xmlhttp.responseText;
                else{
                    // do something else
                }
                ajax_call_2('html_id', 'parameters_to_be_send')
            }
        }
        xmlhttp.open("POST", "script_url", true); //file
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.setRequestHeader("Content-length", params.length); //length
        xmlhttp.setRequestHeader("Connection", "close"); 
        xmlhttp.send(params); //parameters
    }

И вторая функция такая же, но без вызова функции в случае успеха:

        function ajax_call_2(divId, params)
        {
            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){
                    if(divId!='')
                        document.getElementById(divId).innerHTML=xmlhttp.responseText;
                    else{
                        // do something else
                    }
                }
            }
            xmlhttp.open("POST", "script_url", true); //file
            xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlhttp.setRequestHeader("Content-length", params.length); //length
            xmlhttp.setRequestHeader("Connection", "close"); 
            xmlhttp.send(params); //parameters
        }

ajax_call_1 аргументы функцииявляются:

divId : идентификатор элемента html, который будет содержать результат после вызова AJAX

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...