1

私はこれまでで最も奇妙なAJAXバグ(または経験不足の深刻なケース)を抱えています。$ _POSTリクエストの後、の内容のみをdiv#content更新する必要がありますが、他には何も更新されませんが、ページレイアウト全体が壊れているようです。

私のレイアウトは単純です:

<header>..</header><nav>..</nav>

div#left-sidebardiv#content--- _div#right-sidebar

<footer>..</footer>

使用されるJavascriptは次のとおりです。

$("#terms").submit(function(event) {
    if ($("#content #inp_iRead").is(":checked")) {
        event.preventDefault();
        $("#content img[alt=loading]").show();
        $("#content #terms").hide();
        $.post("reg", {
            ajax_reg: true,
            iRead: 1
        },
        function(data) {
            $("#content").html(data).find("#content");
        }, 
    "html");
        }
    });

#termsフォームIDであり#inp_iRead、チェックボックスです。私が欲しいのはdiv#contentdiv#content返されたもので更新することです(この場合は文字列のみが含まれていますfoo :))。

以下は私の期待です(JavaScriptをオフにした場合に表示されます): 期待

そして受け取った結果: 結果

私のAJAXの経験は非常に限られていますが、すべてのチュートリアルとこれまでのところ、このコードが機能するはずです。

これを修正しようとしfilter()たのは、の代わりにを使用しfind()て、同じ結果を返しました。私の意見では、考えられる回避策は、スクリプトにJSONオブジェクトを返させて更新することですが、使用するメソッドを変更するのではなく、機能するはずのコードを修正することdiv#contentに関心があります。

どんな提案でも大歓迎です。

編集:その理由if ($("#content #inp_iRead").is(":checked"))は、そうでなければ私の他のライブフォーム検証スクリプトが機能しないためです。

4

1 に答える 1

2

load()代わりにこの方法を使用します。それははるかに簡単です:

$('#content').load('reg #content > *', {
    ajax_reg: true,
    iRead: 1
});

reg #content > *.load()要素のコンテンツをロードして。regに置き換えるように指示します#content > *

関数にデータを渡すloadと、GETがPOSTに変わります。

于 2012-12-10T22:36:36.827 に答える