2015-05-18 3 views
1

У меня есть набор divs, каждый из которых содержит набор продуктов для сайта электронной почты. Только один div отображается в тот момент, когда нажимается кнопка определенного запаса.ajax получает предыдущий ответ при нажатии кнопки «Назад назад»?

Когда пользователь открывает новый div, у меня есть метод ajax, отправьте $_get variable в файл php, который обновляет базу данных с номером панели, поэтому я могу сохранить историю панели. Когда пользователь нажимает на продукт, отображаемый внутри div, он переводит их на страницу сведений, а затем, если пользователь решает продолжить просмотр и нажимает кнопку «Назад», чтобы вернуться к отображению продукта div, еще один ajax, на $(window).load ajax вызывает файл php, который извлекает номер панели из базы данных и автоматически показывает последний видимый div, который пользователь открыл, когда страница перезагружается.

Хотя по какой-то причине ajax получает предыдущий ответ вместо правильного при нажатии кнопки «Назад», даже если база данных обновлена ​​с правильным номером панели. Но если вместо этого я тестирую кнопку обновления, все работает нормально, когда страница перезагружается.

Пример:

Открыть "одежды" ДИВ -> Аякса посылает "2" в PHP файл -> PHP обновления файла базы данных с "2" -> пользователь переходит прочь, щелчки назад, ajax вызовы в php-файл -> php-файл извлекает номер панели «2» из базы данных и открывает «apparel» div через функцию успеха вызова ajax. все работает хорошо

но теперь, если я открыть другую панель ..

Open "коллекционный" ДИВ -> Аякса посылает "1" в PHP файл -> обновления PHP файл базы данных с «1» -> пользователь перемещается, кликает назад, ajax вызывает файл php ->, но на этот раз он получает «2» в ответе вместо «1» и снова открывается «одежда» div вместо "collectable" div

Почему ajax получает предыдущий ответ «2» вместо «1», даже если база данных обновлена ​​с правильным номером панели.? Если я тестирую кнопку обновления, чтобы перезагрузить страницу после открытия разных div, она всегда отображает правильный div, но если я использую кнопку «Назад», она просто отображает старый div.

Ajax отправить методу

// user clicks apparel panel 
    $("#stockApparel").click(function(){ 

     var $apparel = "2"; 

     $.ajax({ 
      url: "php/panel.php", 
      data: { panel_update: $apparel }, 
      type: "get", 
      dataType: "text", 
      success: function(response){ 
      }, 
     }); 

     var divPosition = $('#shippingImg').offset(); 
     $('html, body').animate({scrollTop: divPosition.top}, "slow"); 
     $("#stockButtons").animate({left: '1140px'}); 
     $("#new").animate({left: '-470px'}); 
     $("#apparel").show(700); 
     $("#marketing").hide(100); 

    }); 

RETRIEVE на оконном нагрузки

$(window).load(function(){ 

     $get = "get_panel"; 

     $.ajax({ 
      url: "php/panel.php", 
      data: { panel_get: $get }, 
      type: "get", 
      dataType: "text", 

      success: function(response){ 
      switch (response) { 

       case "1": // collectable panel 

       $("#stockButtons").animate({left: '1140px'}); 
       $("#new").animate({left: '-470px'}); 
       $("#collectable").show(700); 
       $("#marketing").hide(100); 

       var divPosition = $('#shippingImg').offset(); 
       $('html, body').animate({scrollTop: divPosition.top}, "slow"); 

       alert(response); 

       break; 

       case "2": // apparel panel 

       $("#stockButtons").animate({left: '1140px'}); 
       $("#new").animate({left: '-470px'}); 
       $("#apparel").show(700); 
       $("#marketing").hide(100); 

       var divPosition = $('#shippingImg').offset(); 
       $('html, body').animate({scrollTop: divPosition.top}, "slow"); 

       alert(response); 

       break; 

       default: 

      } 

      }, 

     }); 

    }); 

PHP файл

<?php 
require_once 'connect.php'; 

if (isset($_GET['panel_update'])) { // Sets the panel number 

    $set = $_GET['panel_update']; 
    $sql = "UPDATE panel SET panel='$set' WHERE id=1"; 


    if ($mysqli->query($sql) === true) { 

    } else echo "mysql error:" . $mysqli->error; 


} 

if (isset($_GET['panel_get'])) { // Retrieves the panel number 

    $get = $_GET['panel_get']; 
    $sql = "SELECT * FROM panel WHERE id=1"; 
    $result = $mysqli->query($sql); 

    $row = $result->fetch_assoc(); 

    echo $row['panel']; 

} 
?> 

ответ

1

Похоже, ваши ответы AJAX кэшируются. Если вы используете PHP-сессии, тогда ответы обычно будут иметь правильные заголовки без кеша, но если нет, то браузер будет кэшировать. Когда вы нажмете «refresh» в браузере, это заставляет новый запрос произойти, поэтому вы видите «правильное значение» после обновления.

Быстрый способ увидеть, нужно ли отправлять правильные заголовки без кеша, использовать Chrome Dev Tools или Firefox Dev Tools и переключиться на вкладку Сеть. В Ответ Заголовки для вызова AJAX, найдите Cache-Control: no-cache и friends.

+0

ahhh okay, когда я нажимаю кнопку «Назад» в заголовках, я вижу: Код состояния: 200 OK (из кеша). Когда я нажимаю кнопку обновления, я получаю код состояния: 200 OK. Спасибо! – user3796133

+0

Вот небольшая функция, которую я использую, когда мне нужно вручную принудительно отключить кеш: 'function emit_nocache_headers() { header ('Pragma: no-cache'); header ('Cache-Control: no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0'); header ('Истекает: Чт, 19 ноября 1981 года 08:52:00 GMT'); } ' –

+0

Спасибо, друг, привет! – user3796133

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