请求两个Ajax
我试图进行两次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 } 我的想法是,现在不再
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库具有回调支持,这将允许您在第一个函数完成时执行第二个函数。