0

HTML ボタンの onClick 属性によって呼び出される関数に次のコードがあります。

すべきことは、.jsp に POST し、成功時にコンソールに書き込み、ページをリロードすることです。ただし、何が起こるかというと、メッセージがコンソールに書き込まれ (つまり、成功条件が呼び出された)、ページがリロードされますが、.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 に答える