2

私は現在、スレッドを開始してタスクを続行するアプリケーションのページ読み込み時に、grails コントローラーでアクションを実行しようとしています。私はまだこれをうまく実装できていません。これは私のコードです:

    $(document).ready(function(){
    var $form = $("#background_thread");
    $form.submit(function(e){
        e.preventDefault();
        $.post($(this).attr("background"), $(this).serialize(), function(data){
            alert("should work" + data)
        });
        return false;
    });
});

なぜそれが機能しないのか、私の人生では理解できません。私が見落としている単純な構文や、これを行うべき別の方法はありますか?

アップデート:

私のフォームIDは#background_thread非同期で実行しようとしているので、ページは同じままでアクションが実行されます。

スクリプトは実行されますが、失敗して$form.submit(function(e){通過しません。

4

1 に答える 1

2

生成されたイベントのデフォルトの動作を防止する必要があります。

$form.submit(function(e){
    e.preventDefault();
    // your code
}

アップデート:

スクリプト全体が機能するようになったら、必ず上記を追加する必要があります。また、質問にマークアップを追加してください。確認するためのいくつかの基本的な質問:

#background_thread はフォームの ID ですか?

Chrome Inspector (または同様のもの) のネットワーク タブで、リクエストが発生していますか?

マークアップは非同期で配信されていますか?その場合、基本的なセレクターではなく、イベントを永続的にアタッチするために .on を使用する必要がありますか?

更新 2:

フォーム自体が非同期で配信されるため、イベントの添付ファイルを次のように変更する必要があります。

$(document).ready(function(){
    $("body").on("submit", "#background_thread", function(e){
        e.preventDefault();
        $.post($(this).attr("background"), $(this).serialize(), function(data){
            alert("should work" + data)
        });
        return false;
    });
});

説明すると、ドキュメントの準備中にイベント添付が発生していました。Document ready が発生しますが、フォームはまだ DOM に配信されていないため、添付ファイルがありません。したがって、on() を使用して、ページ全体がブラウザーにレンダリングされている間、そのイベントをその要素に永続的にアタッチします。

NB私はそれをボディに添付し、その時点で送信のリッスンを開始しましたが、実際には多くの理由でこれを行いません。フォームのAJAX置換の最も外側のポイント、本質的にはフォームに最も近い親に添付しますこれは、最初のページの読み込み時に認識されます。

これが役に立ち、あなたのアプリケーションがうまくいくことを願っています。

于 2013-08-05T19:34:34.857 に答える