2012-02-12 2 views
2

У меня есть элемент select, который публикует сообщения (просто отлично) при изменении с помощью $ .post. Но если я хочу перезагрузить страницу и добавить location.reload(), то она не публикуется. Если я удалю строку, она будет помечена в порядке. Есть идеи?

 <script type="text/javascript"> 
      $('#target').change(function() { 
      $.post('<?=$base_url?>orders/create-new/order-items/<?=$order_id?>/target', 
       { 
       use_sort_modifier: $('select#target').val(), 
       order_id: <?=$order_id?> 
       } 
      ); 
      location.reload(); // Works without this line. 
      }); 
     </script> 
+2

вы должны написать эту строку в функцию обратного вызова успеха. – Ehtesham

ответ

4

Ajax является асинхронным. Ваша перезарядка срабатывает до того, как сообщение успеет закончить.

Выполните перезагрузку в обработчик событий success Почты:

$.post('<?=$base_url?>orders/create-new/order-items/<?=$order_id?>/target', 
    { 
    use_sort_modifier: $('select#target').val(), 
    order_id: <?=$order_id?> 
    }, 
function() { location.reload(); } 
); 
+0

Спасибо, отлично работал. Я отвечу на ваш ответ, как только SO позволит мне это сделать. – Ted

1

$.post() выполняется асинхронно, так что это на самом деле не сделано, когда вы звоните location.reload(), следовательно, она прерывается - вы можете передать успех обратного вызова $.post(), который выполняется после того, как сообщение было успешно завершено и выполнить свой перезарядку там ,

1

Вам нужно сделать location.reload() на обратный вызов с поста, а не только после того, как в почтовом коде.

Вот пример:

$.ajax({ 
     type: 'POST', 
     url: url, 
     data: data, 
     success: function() { location.reload() }, 
     dataType: dataType 
    }); 

Вы должны поместить его в success: части в вашем $post коде.

0

Вы также можете поместить async: false в ваше АЯКС заявление

+0

Спасибо. Я использую .post, но вместо .ajax. – Ted