2016-03-16 2 views
0

У меня есть кнопка (setarea) на моей странице, которая устанавливает переменную сеанса при нажатии. На странице есть несколько других полей, которые изменяются в зависимости от этой переменной сеанса. Поэтому при каждом нажатии этой кнопки я хочу автоматически обновлять всю страницу, чтобы другие поля обновлялись с новым значением переменной сеанса. Вот мой код:Ручное обновление против location.reload

 function setarea(){ 
      var area_id = jq("#splash_area").val(); 

      jq.ajax({ 
       type: 'POST', 
       url: '<?php echo Mage::getBaseUrl(); ?>setsession/index/setarea', 
       data: {area_id:area_id}, 
       success: function(data) { 
       } 
      }); 

      window.location.reload(true); 

     } 

Используя этот код, страница обновляется, но переменной сессии не обновляется - она ​​остается такой же, как и раньше.

Интересная часть заключается в том, что когда я обновляю вручную, используя F5, страница обновляется правильно.

Что я здесь делаю неправильно?

+0

Возможно, страница обновляется до возврата запроса ajax. Попробуйте переместить 'window.location.reload (true);' внутрь функции успеха ajax. – Terminus

+0

Это правильный ответ ... Спасибо Terminus! Пожалуйста, напишите как ответ, чтобы я мог отметить его как правильный ответ. – coderatlarge

ответ

1

Поскольку AJAX является асинхронным, как только запрос AJAX сделан, reload пожары сразу после. JS не ждет ответа на запрос AJAX. Переместите вызов на reload с помощью функции success.

function setarea(){ 
    var area_id = jq("#splash_area").val(); 

    jq.ajax({ 
     type: 'POST', 
     url: '<?php echo Mage::getBaseUrl(); ?>setsession/index/setarea', 
     data: {area_id:area_id}, 
     success: function(data) { 
      window.location.reload(true); 
     } 
    }); 
} 
+0

Идеальный ответ. – coderatlarge

0

пытаются заменить

window.location.reload(true); 

с

header("Location: YourFile.php"); 
+0

Что это за функция 'header()' на стороне клиента и почему это устранит проблему OP? – jfriend00