解决方案如下:
function ajaxCall(url, callback) {
// 创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
// 设置请求的方法和URL
xhr.open("GET", url, true);
// 注册请求完成的回调函数
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// 请求成功,调用回调函数
callback(xhr.responseText);
}
};
// 发送请求
xhr.send();
}
function processResponse(responseText) {
// 处理响应数据
console.log(responseText);
}
var urls = ["url1", "url2", "url3"];
var count = 0;
function makeAjaxCall() {
if (count < urls.length) {
// 发起AJAX请求
ajaxCall(urls[count], function(responseText) {
// 处理响应
processResponse(responseText);
// 递归调用,继续下一个请求
count++;
makeAjaxCall();
});
} else {
// 所有请求完成,执行回调函数
console.log("All AJAX requests completed.");
}
}
makeAjaxCall();
上述代码中,我们定义了ajaxCall
函数来发起AJAX请求,并传入一个回调函数。然后,我们定义了processResponse
函数来处理每个请求的响应数据。
在主函数makeAjaxCall
中,我们使用一个计数器count
来追踪当前处理的URL。在每次循环中,我们调用ajaxCall
函数发起AJAX请求,并在回调函数中处理响应。然后,递增计数器count
,继续下一个请求。当所有请求完成后,我们执行回调函数,表示循环结束。
这种方法可以确保在for循环中发起的每个AJAX请求都完成后,再执行回调函数。