Я пытаюсь импортировать данные с помощью одного ajax и пытаюсь отслеживать эти импортированные данные в реальном времени с помощью другого ajax, чтобы показать индикатор выполнения (сколько записей было загружено).
checkPrgressVar = setInterval(checkPrgress, 1000);
importTaxes(importURL,cart_url,cart_token);
/* check progress of imported data */
function checkPrgress()
{
$.ajax({
url: $(document).find("input[name='progressURL']").val(),
type: 'POST',
dataType: 'json',
// showLoader: true,
data: "action=import_store",
complete: function(response) { debugger
var response = response.responseJSON.output;
},
error: function (xhr, status, errorThrown) {
console.log('Error happens. Try again.');
}
});
}
/* import data */
function importTaxes(importURL,cart_url,cart_token)
{
$.ajax({
url: importURL,
type: 'POST',
dataType: 'json',
showLoader: true,
data: "cart_url="+cart_url+"&cart_token="+cart_token+"&action=import_tax",
complete: function(response) { debugger
var response = response.responseJSON.output;
if(response.result == 'processing')
{
}
else
{
}
},
error: function (xhr, status, errorThrown) {
console.log('Error happens. Try again.');
}
});
}
Мой checkProgress ajax возвращает ответ только после получения ответа от importTax ajax, в то время как этот checkProgress ajax должен быть независимым от importProgress ajax.
Однако оба ajax вызывают разные контроллеры, кажется, что magento не позволяет вызывать другой контроллер, пока он не обработает другой.
Я не знаю, почему это происходит и как это решить?
Я пробовал эту ссылку, но не работает.
Можно ли запустить несколько ajax запрашивает асинхронно в бэкенде Magento 2?
EDIT1: что я понял, если я вызову другой внешний URL-адрес вместо контроллера magento2 в вызове ajax checkProgress. он начал работать. Это означает, что magento2 не позволяет выполнять другой контроллер, пока другой работает через import ajax.
EDIT2- Оба ajax начали работать должным образом, если я изменил хранилище сеансов с «files» на «db» в файле env.php. Кажется, проблема с блокировкой сеанса, как описано в приведенной ниже ссылке:
Два одновременных запроса AJAX не будут выполняться параллельно
Но использовать БД в качестве хранилища сессий не желательно. Поэтому, если я использую файлы в качестве хранилища сеансов, я все еще не знаю, как это решить.
Есть какое-нибудь представление об этом?