2015-03-06 2 views
-1

В веб-приложении, которое взаимодействует с одним сервером, есть вызов jQuery Ajax с PHP-скриптом, для выполнения которого требуется около 20 секунд.В веб-приложении многие процессы jQuery + Ajax + PHP не выполняются параллельно одному и тому же клиенту.

$(document).ready(function() { 
    $.ajax({ 
     type: 'POST', 
     dataType: 'json', 
     url: 'createPDF.php', 
     data: str, 
     success: function(response) { 
      showPDF(response); 
     } 
     error: function() { 
      console.log('ERROR WHEN CREATING PDF'); 
     } 
    }); 
}); 

В то же время пользователь просят приложения, чтобы получить список (getList.php) через другой JQuery Ajax независим от CreatePDF.

$(document).ready(function() { 
    $.ajax({ 
     type: 'POST', 
     dataType: 'json', 
     url: 'getList.php', 
     data: str, 
     success: function(response) { 
      showList(response); 
     } 
     error: function() { 
      console.log('ERROR WHEN GETTING LIST'); 
     } 
    }); 
}); 

Проблема в том, что getList.php запускается только после завершения созданияPDF.php.

Приложение работает с сеансами, а тесты выполняются отдельными клиентами, и в этом случае оба запроса выполняются параллельно, но на том же компьютере их нет.

В этом случае как выполнять оба запроса параллельно?

Спасибо

+0

вы пытаетесь использовать 'асинхр:' вариант, как верно? –

+0

Я пробовал, но он по умолчанию установлен, так что он не имеет значения – mikl

+0

Вы уверены, что он выполняется только после последующего вызова? Как бы то ни было, это 'viewPdf()', что делает вызов getList.php? Если это так, это ваша проблема. – kylehyde215

ответ

1

В основном то, что происходит в том, что на сервере файл сессии заблокирован первого сценария, например, saveFiles. После того, как этот скрипт выполнил свою задачу, сеанс снова разблокируется. К сожалению, ваш скрипт getList хочет получить доступ к тому же сеансу, так как он заблокирован, getList придется ждать, пока он не будет разблокирован.

Одним из решений для этого является вызов session_write_close() после того, как все записи в данные сеанса были выполнены, что приведет к разблокировке файла сеанса и его использованию следующим скриптом. Этот вызов, очевидно, должен произойти как можно скорее после session_start(), чтобы свести к минимуму время ожидания для других запросов.

Для более подробного объяснения взглянуть на https://stackoverflow.com/a/6933294/2442804

Смежные вопросы