0

ノードを作成しようとすると、特定の問題があります。コンテキストメニューからはすべて問題ありませんが、ボタンからイベントの作成を呼び出すと、AJAX リクエストがありません。

見て:

    bind("create.jstree", function (e, data) {
    console.log('creating');

    $.ajax({
        type: 'post',
        url: '/item/add',
        data: {
            name:  data.rslt.name,
            id_menu_content_parent: data.rslt.parent.attr("id").replace("node_",""),
            id_type_object: data.rslt.obj.attr("rel")
        },
        success: function (dataItem){
        }
    });
    console.log('end');
});

そして、コンテキストメニューから呼び出しても問題ありません。スティングの作成、次のAJAXリクエスト、最後に文字列の終了が表示されますが、ボタンをクリックすると、文字列の作成のみが表示され、それ以上は表示されません。

これをどうすればいいですか?

4

1 に答える 1

1

コンテキスト メニューから呼び出されたときに create が機能し、ボタンで呼び出されたときに機能しない最も可能性の高い理由は、コンテキスト メニューの場合、create コールバックが呼び出されたときにツリー ノードが選択されている可能性があるためです。ただし、ボタンから create コールバックを呼び出す場合、必ずしもノードが選択されているとは限りません。これにより、$.ajax未定義のプロパティを参照しようとするため、呼び出しが失敗する可能性が高くなります。具体的にdata.rslt.parent.attr("id")は、ノードが選択されていない場合、新しいノードが親レベルで作成され、data.rslt.parent値が になるため、 は失敗します-1。これにより、出力が表示されない理由が説明されますconsole.log('end')

あなたの質問から、JavaScriptをデバッグするためにデバッガーを使用していないと思います。なんらかの本格的な開発を行う場合は、printfスタイルのデバッグに頼ることはできません。特に、ブラウザーにはおそらく JavaScript デバッガーが既に組み込まれているためです。デバッガーを使用してコードを実行すると、投稿で問題の原因をすぐに確認できます。デバッガーを効果的に使用する方法を習得するにはしばらく時間がかかるかもしれませんが、今後ははるかに多くの時間を節約でき、より良いコードを作成するのに役立ちます。

ところで、Firebugs を使用した FireFox または Chrome のいずれかでコードをデバッグすることをお勧めします。これら 2 つのブラウザーは優れた開発ツールを提供するからです。

于 2012-05-08T21:22:57.253 に答える