0

我在由 HTML 按钮的 onClick 属性调用的函数中有以下代码。

它应该做的是 POST 到 .jsp,成功时写入控制台,然后重新加载页面。然而,发生的事情是消息被写入控制台(即调用成功条件),页面重新加载,但 .jsp 没有运行(我在调试中,它甚至没有注册任何东西)。

有趣的是,注释掉 location.reload() 或者简单地在它上面放置一个断点可以让事情正常工作。

为什么会这样?

$.ajax({
    type: "POST",
    url: "Move.jsp",
    data: { action: 'move',
        nodeID: nodeID
    },
    success: console.log("Moved " + nodeID)
});
location.reload();
4

2 回答 2

1

AJAX 中的 A 代表“异步”。您的$.ajax()调用基本上在后台运行并且不会干扰您的其他代码,因此location.reload()无论是否发送了 POST 请求,都会立即执行。

此外,console.log()应该在匿名函数内部才能正确执行。

您可以使其同步(这将锁定浏览器,直到请求完成):

$.ajax({
    type: "POST",
    url: "Move.jsp",
    async: false,
    data: {
        action: 'move',
        nodeID: nodeID
    }
});

console.log("Moved " + nodeID);
location.reload();

或将您的移动location.reload()到回调中:

$.ajax({
    type: "POST",
    url: "Move.jsp",
    data: {
        action: 'move',
        nodeID: nodeID
    },
    success: function() {
        console.log("Moved " + nodeID);
        location.reload();
    }
});
于 2013-04-09T16:01:43.557 回答
0

在 ajax 调用有机会发布之前刷新页面。

将您的重新加载移动到成功处理程序中:

$.ajax({
    type: "POST",
    url: "Move.jsp",
    data: {
        action: 'move',
        nodeID: nodeID
    },
    success: function() {
        console.log("Moved " + nodeID);
        location.reload();
    }
});
于 2013-04-09T15:59:45.473 回答