2012-02-12 70 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 2012-02-12 17:20:23

回答

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 2012-02-12 17:26:45

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到你的Ajax声明

+0

谢谢。我使用.post,而不是.ajax。 – Ted 2012-02-12 17:33:31

相关问题