запрашивая два Ajax - PullRequest
       19

запрашивая два Ajax

0 голосов
/ 20 января 2012

Я пытаюсь сделать два Ajax-вызова, чтобы получить данные для заполнения разных битов веб-страницы, и, как вы уже знаете, происходит только второе.

Так что я решил сделатьthis:

callAjax1('a'); callAjax2('b');

function callAjax1(data) {
 ajax(data);
}

function callAjax2(data) {
 ajax(data);
}

function ajax(data) {
 // calls XMLHttpRequestObject etc
}

Идея заключалась в том, что вместо того, чтобы дважды вызывать ajax (), теперь у меня будет два независимых экземпляра ajax, которые будут работать независимо.

Это работает .. нотолько если я добавлю предупреждение в верхней части ajax (), чтобы сообщить мне, что я прибыл.

Так что я думаю, что оповещение дает время завершения первого запроса до вызова второго.Поэтому мне не удалось правильно разделить их на отдельные экземпляры.Разве это невозможно?

Чего мне не хватает?

Всего наилучшего J

ОБНОВЛЕНИЕ: Я думаю об этом, у меня есть шанс?

tParams = new Array (2); // we intend to call ajax twice
tParams[0] = new Array('ajaxGetDataController.php', 'PROJECT', 'id');
tParams[1] = new Array('ajaxGetFileController.php', 'FILE', 'projectId');

<select name='projectSelector' onchange=\"saveData(tParams, this.value);\">\n";

// gets called, twice
function saveData(pParams, pData) // pParams are: PageToRun, Table, Field
{
    if (XMLHttpRequestObject)
    {
        tPage = pParams[0][0]+'?table='+pParams[0][1]+'&pField='+pParams[0][2]+'&pData='+pData;
        XMLHttpRequestObject.open('GET', tPage);\n

        XMLHttpRequestObject.onreadystatechange = callAjax(pParams, pData);

        XMLHttpRequestObject.send(null);

    }   
}

function callAjax(pParams, pData)
{
 if (XMLHttpRequestObject.readyState == 4 &&    XMLHttpRequestObject.status == 200)
    {
        var tReceived = XMLHttpRequestObject.responseXML;
        options = tReceived.getElementsByTagName('option'); // fields and their values stored in simplest XML as options
        popForm(options, pParams[0][1]); // goes off to use the DOM to populate the onscreen form
        pParams.shift();    // cuts off pParams[0] and moves all elements up one
        if (pParams.length>0)
        {
            saveData(pParams, pData);
        }
    }
}

1 Ответ

0 голосов
/ 20 января 2012

Я бы создал переменную состояния готовности для функции AJAX:

function ajax(data) {
 readyState = false;
 // calls XMLHttpRequestObject etc
}

А затем проверьте состояние готовности перед выполнением второго вызова:

function callAjax2(data) {
if(readyState == true) {
 ajax(data);
 readyState = true;
 }
}

И обязательно измените readyState обратно на false после выполнения вызовов AJAX. Это обеспечит выполнение первого вызова AJAX до того, как второй попытается запустить.

...