Я столкнулся с очень паранормальной проблемой.Я пытаюсь внедрить корзину покупок, в которой у меня на стороне клиента хранятся файлы cookie, чтобы определить, какие идентификаторы товаров были заказаны и их количество.Когда я загружаю HTML-страницу оформления заказа, я читаю файлы cookie и получаю идентификатор элемента один за другим;затем для каждого идентификатора элемента я буду отправлять запрос в мой сервлет, который будет возвращать информацию.Я сократил избыточные строки, чтобы было проще следовать:
var arrXhr = new Array();
function ProcessCheckout(){
try
{
var myArr = new Array();
myArr[0]=84234;
myArr[1]=84239;
myArr[2]=84240;
for (var intLoop=0; intLoop < myArr.length; intLoop++){
var intIcint=myArr[intLoop];
arrXhr[intIcint]= new XMLHttpRequest();
function Populate_CheckOutCart(){
arrXhr[intIcint].open('POST', strRemoteUriReq, true);
arrXhr[intIcint].send(null);
arrXhr[intIcint].onreadystatechange= ProcessSrvRsp(intIcint);
}
}catch(errors)
{
alert(errors.message);
}
}
}
function ProcessSrvRsp(ItemToProcess){
if (arrXhr[ItemToProcess].readyState==4){
//doing some functionality here on item code: ItemToProcess
}
}
Проблема здесь в строке
arrXhr[intIcint].open('POST', strRemoteUriReq, true);
Если я изменил тип запроса на SYNCHRONOUS, то есть с TRUE наЛОЖЬ, все работает правильно, но, как вы знаете, веб-странице придется ждать, пока сервер обработает каждый элемент.Следовательно, веб-страница отправит запрос на элемент 84234, ожидает, когда ответ поступит, затем отправляет запрос на элемент 84239 и т. Д.
Насколько мне известно, если я вернусь обратно ASYNCHRONOUS XMLHttpRequest, ничего не происходиткроме / только когда arrXhr [ItemToProcess] .readyState == 1.Но что касается других штатов, 2,3,4 (4 является наиболее важным для начала работы), они никогда не запускаются.
Есть идеи почему?И самое главное, как мы можем преодолеть это?Я знаю, что XMLHttpRequest работает в отдельном потоке, и, скорее всего, это проблема, но я не могу найти решение.
Моя цель проста, я хочу, чтобы моя веб-страница отправляла несколько запросовна мой сервлет одновременно, как только он читает файлы cookie на диске;следовательно, для каждого файла cookie я хочу отправить запрос и получить ответ асинхронно.Я не хочу, чтобы браузер застрял в ожидании, пока окончательный запрос не будет выполнен.Так что, если у вас есть другие идеи / реализации, я могу быть очень открытым человеком;)
ps Я использую TomCat 7