3

次のJavaScriptコードがあります:

$.post("<receiver>", postdata);

そして、常にポストデータを取得するとは限りません。次のコードを書くと、すべてうまくいきます。

$.post("<receiver>", postdata);
alert('bla-bla-bla, read me for a second');

なんで?JavaScript が実行されると、保存ボタンでページが変更されます。しかし、リダイレクトする前に投稿データを送信する必要があります。

4

5 に答える 5

1

AJAX 呼び出しの成功コールバック内でリダイレクトする必要があります。

$.post("<receiver>", postdata, function() {
    window.location.href = '...';
});

呼び出しの直後にアラートを配置するとコードが機能する理由$.postは、このアラートがポップアップ表示されると、ブラウザーが実行を中断し、AJAX 呼び出しが完了するのに十分な時間があるためです。

AJAX の最初の A はAsynchronousを表すことを忘れないでください。これは、サーバーから返された結果のみを成功のコールバック内で使用できることを意味します。

また、この AJAX 呼び出しが.submit()フォームのイベント ハンドラー内、.onclick()または送信ボタンまたはアンカーのハンドラー内で実行される場合は、false を返すことによって既定のアクションをキャンセルしたことを確認する必要があります。そうしないと、AJAX 呼び出しを実行する時間がありません。ブラウザがページからリダイレクトされる前。

例:

$('#myForm').submit({
    $.post("<receiver>", postdata, function() {
        ...
    });
    return false; // <!-- That's the important bit
});
于 2013-02-22T09:47:23.140 に答える
1

ああ、あなたの質問の欠けている部分は、はいをクリックしてデータを送信しているようです? おそらくリンク?そのリンクにより、ブラウザーはすぐにそれをたどります。あなたの例では、アラートがブラウザーを遅らせているため、投稿を完了するのに十分な時間があります。

そのリンクのデフォルト アクションがブロックされていることを確認し、代わりに $.post() のコールバックでリダイレクトを行う必要があります。

$("a.some_class").click(function(evt)
{
    evt.preventDefault(); // makes sure browser doesn't follow the link

    // gather your post data here ...

    var $this = this;
    $.post("<receiver>", postdata, function()
    {
        window.location.href = $this.attr("href");
    });
})
于 2013-02-22T09:53:20.220 に答える
0

アラートが原因でスクリプトが一時停止しているため、スクリプトが$.post()完了するまで時間がかかります。

リダイレクト スクリプトを$.post()コールバックに配置する必要があります。

于 2013-02-22T09:47:58.113 に答える
0

遅延の原因になるからです。[OK] を押すと、リクエスト (少なくとも数ミリ秒かかります) が終了し、それに応じた処理が続きます。

これを防ぐために、リクエストがレスポンスを受け取った後に実行されるコールバック関数を渡すことができます。

$.post( url, postdata, function() {
    // Success.
} )
于 2013-02-22T09:49:46.653 に答える
0

.post は非同期です。

ポストプロセス () 中にページを変更すると、POST リクエストは中止されます。あなたalertがこのページの変更を妨げています

.post を .ajax 同期リクエストに置き換えて、成功時にフォーム送信を検証する必要があります ( return true;) 。または@DarinDimitrovまたは@Curtの提案に従ってください

于 2013-02-22T09:53:12.907 に答える