2016-10-31 2 views
0

У меня есть веб-приложение, которое загружает другой контент в один и тот же div (.content), используя либо запрос ajax, либо запрос .load().jQuery .load не работает, пока выполняется запрос ajax

Упрощенная версия запроса Ajax является:

$(document).on('click', '.button1', function() { 
     $.ajax({ 
     type: "POST", 
     url: "/path/to/file/ajax.php", 
     data: { 
      'param1': 'xyz', 
      'param2': '123',  
     }, 
     timeout: 10000, 
     dataType: "json", 
     success: function(data) { 
      if (data.status == 'Success') { 
       $('.content').html(data.result); 
      } else if (data.status == 'Error'){ 
       console.log('Something went wrong') 
      } 
     }, 
     error: function(x, status, error) { 
      if (status === "timeout") { 
       console.log('Request Timed Out'); 
      } 
     }, 
     }); 
    }); 

на другой кнопке у меня есть:

$(document).on('click', '.button2', function() { 
      $('.content').load('/path/to/file/getContent.php?ref=foo'); 
    }); 

Проблема заключается в том, что если я нажимаю на Button1, а затем нажмите на кнопку 2 в то время как запрос ajax все еще выполняется, ничего не происходит. (т. е. getContent.php, похоже, ничего не возвращает в течение 15-30 секунд)

Нажатие кнопки 2 возвращает результаты мгновенно, но как только нажата кнопка1 и выполняется запрос ajax, похоже, «затормозит» все веб-приложение до его завершения (или ошибок).

(Я также попытался использовать метод abort() для отмены запроса ajax, но та же проблема сохраняется, даже когда прервать успешно).

UPDATE См решение/ответ ниже

+0

Это скорее всего не интерфейсный, а сервер, который является проблемой. PHP иногда имеет проблемы с несколькими запросами, используя одни и те же переменные сеанса и т. Д. – adeneo

+0

@adeneo Спасибо за ваш ответ - я удалил session_start() из ajax.php и getContent.php (они, вероятно, были переполнены, так как они также вызываются на странице main.php), и это, похоже, устранило проблему! Проделайте еще несколько проверок перед публикацией обновления. – JS77

ответ

0

Вслед за наводку @adeneo, я сделал некоторые дополнительные исследования в session_start и AJAX вызовов, которые привели меня к этой статье:

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

Проблема была абсолютно связана с session_start, блокирующим файл сеанса, который вызывает проблемы с многочисленными запросами ajax. Следуя советам в статье выше, я использовал session_write_close() в своем PHP, и все работает отлично.

Если это поможет кому-либо еще, я на самом деле изменил код из session_start(), чтобы:

if (session_status() == PHP_SESSION_NONE) { 
     session_start(); 
     session_write_close(); 
    } 

Это делает переменные сессии для чтения, но не блокирует файл сеанса вызывает АЯКС задержки запроса. (Он также проверяет, чтобы session_start() еще не был вызван)

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