На моей веб-странице есть таблица, в которой каждая строка имеет кнопку «+», чтобы появилась мини-таблица. В мини-таблице представлены данные из супер медленной базы данных, поэтому я получаю данные через аякс-запросы. Моя проблема уходит корнями в определенную ситуацию. Предположим, вы нажали кнопку «плюс», вызвав запрос AJAX, и, ожидая нажатия кнопки «плюс». Второй запрос ajax заставляет первый запрос никогда не возвращаться. Другими словами, новый запрос перезаписывает все предыдущие ожидающие запросы. Любая идея, почему это может произойти? Я чувствую, что это может произойти только тогда, когда вы не используете jQuery для обработки AJAX, но я не уверен, и я не мог найти ничего, что говорило бы об этом. Я добавляю свой код ниже. Любая помощь приветствуется!Параллельные запросы AJAX не работают. Новый запрос перезаписывает предыдущий запрос
function fetchSINamesForVariantAJAX(latestBuild, variantToExpand){
if (latestBuild == "") {
//document.getElementById(subTableId).innerHTML = "";
return;
}
else {
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) {
spinner.stop();
var variantRow = variantToExpand + "Row";
if (document.getElementById(variantRow).rows.length == 1){
var json = JSON.parse(xmlhttp.responseText);
var SINames = json['SIs'];
var locations = json['locations'];
var SIBuilds = json['SIBuilds'];
for (var i = 0; i < SINames.length ; i++){
var row = document.getElementById(variantRow).insertRow(-1);
var cell = row.insertCell(-1);
var SILinkURL = "exampleWebsite.com/name.php?names=" + SINames[i];
cell.innerHTML = "<a href=\"" + SILinkURL + "\">" + SINames[i] + "</a>";
cell = row.insertCell(-1);
var fullLocation = locations[i] + "\\" + SIBuilds[i];
cell.innerHTML = "<a href=\"" + fullLocation + "\">" + fullLocation + "</a>";
cell = row.insertCell(-1);
cell.innerHTML = "";
}
}
}
}
//create the GET message to be sent using AJAX window
var stateToSend = "SITableGeneratorFromVariant.php?";
stateToSend += "latestBuild=" + latestBuild;
xmlhttp.open("GET", stateToSend, true);
xmlhttp.send();
}
}
Может вам быть более конкретным по поведению, которое вы видите? Запрос AJAX не будет отменять другой запрос. В средствах отладки браузера, что происходит с двумя запросами? Каковы их ответы с сервера? Когда вы отлаживаете этот код, что происходит, когда каждый возвращается и вызывается 'onreadystatechange'? – David
Я думаю, это потому, что ваш запрос var xmlhttp не включен в функцию, поэтому каждый раз, когда вы вызываете эту функцию, xmlhttp-запрос является глобальным var, и вы переписываете его. Попробуйте объявить var xmlhttp в верхней части вашей функции –
Я принял ваш совет и заглянул в отладку. Я заметил, что я никогда не объявлял xmlhttp как var, поэтому добавил строку «var xmlhttp;» в самой верхней части функции и которая фиксировала проблему. Спасибо за помощь! – user3662531