请求两个Ajax

请求两个Ajax,ajax,reference,instances,Ajax,Reference,Instances,我试图进行两次Ajax调用,以获取数据来填充网页的不同部分,正如您已经知道的,只有第二次调用发生 所以我想我应该这样做: callAjax1('a'); callAjax2('b'); function callAjax1(data) { ajax(data); } function callAjax2(data) { ajax(data); } function ajax(data) { // calls XMLHttpRequestObject etc } 我的想法是,现在不再

我试图进行两次Ajax调用,以获取数据来填充网页的不同部分,正如您已经知道的,只有第二次调用发生

所以我想我应该这样做:

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

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

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

function ajax(data) {
 // calls XMLHttpRequestObject etc
}
我的想法是,现在不再两次调用ajax,而是使用两个独立运行的ajax实例

它起作用了。。但前提是我在ajax的顶部输入一个警报,让我知道我已经到达了

所以我认为alert会在调用第二个请求之前给第一个请求一个完成的时间。因此,我没有将它们正确地分离到单独的实例中。这不可能吗

我错过了什么

祝你一切顺利 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);
        }
    }
}

我将为AJAX函数创建一个就绪状态变量:

function ajax(data) {
 readyState = false;
 // calls XMLHttpRequestObject etc
}
然后在执行第二个调用之前检查就绪状态:

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

并确保在执行AJAX调用后将readyState更改回false。这将确保在第二个AJAX调用尝试启动之前,第一个AJAX调用已完成执行。

谢谢,我今天将介绍这一点。一夜之间,我想我可以使调用递归,给它一个参数数组,在每次调用时,它都会删除顶部的数组元素,直到数组为空。你的看起来更简单:-如果第二个调用没有准备好,那不是就不执行了吗?它不是“等待”它准备好。。是吗?我有机会这样做吗?好的,我刚刚更新了我上面的问题,我想到了递归的东西。。这感觉有用吗?我会让你们都知道的。我很好奇——有什么原因不使用jQueryAjax库吗?jQueryAjax库具有回调支持,这将允许您在第一个函数完成时执行第二个函数。