为什么location.reload()打破了我的$ .post?

时间:2012-02-12 17:18:05

标签: javascript jquery

我有一个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>

4 个答案:

答案 0 :(得分: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(); }
 );

答案 1 :(得分:1)

$.post()异步执行,所以当你调用location.reload()时它并没有真正完成,因此它被中断 - 你可以将成功回调传递给$.post(),一旦帖子有了已成功完成并在那里执行重新加载。

答案 2 :(得分:1)

您需要在帖子的回调中执行location.reload(),而不仅仅是在帖子代码之后。

以下是一个例子:

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

您需要将其放在success:代码中的$post部分。

答案 3 :(得分:0)

您还可以将async: false放入ajax语句