我有一个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>
答案 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语句