次のように、jQuery.ajax() の複数のレイヤーを使用して単純な CMS を構築しました。
function navto(destination, pageToEdit, insertInto) {
// use JQuery's ajax method to control main navigation
if (pageToEdit == "undefined") {
var request = $.ajax({
url: destination
});
} else {
var request = $.ajax({
type: "POST",
url: destination,
data: pageToEdit
});
}
request.done(function(msg) {
if (insertInto) { $(insertInto).html( msg ); }
else { $("#mana_content").html( msg ); }
//alert(msg);
});
request.fail(function(jqXHR, textStatus) {
alert( textStatus + ". This page could not be found." );
});
}
たとえば、index.php は<li class="child" onclick="navto('inc/edit_pages.php');">Edit Pages</li>
edit_pages.php をロードするために使用します<div id="content"></div>
edit_pages.php は$(document).on("click", "a.editPage", function(e) { load_page_for_edit(e); return false; });
(関数にload_page_for_edit()
送信される情報を収集して準備する場所) を使用して、次のようなものを送信しますnavto()
edit_page.php?t=template.php&c=contentID
edit_page.php は、これらの値を使用して、対応するデータベースで必要な情報を検索し、template.php&c=content
独自のようなものを出力し<div id="page_to_edit"></div>
ます ... 再び、別のnavto()
.
次に、ユーザーは $('.edit_text') 要素をクリックして、内部に TinyMCE テキストエリア ($('#editor') と呼ばれる) を含む div を再表示できます。
コンテンツはvar content = $('.edit_text').html()
ここに問題があります: コンテンツ変数を TinyMCE テキストエリアにロードしようとすると -- $('#editor').html(content);
-- テキストエリアはそれを受け取りません。これはalert($('#mana_editor').html());
、正しいコンテンツを出力しますが、HTML 文字が安全になります (たとえば、に<p>
なる<p&rt;
)。ただし、コンテンツは TinyMCE に読み込まれません。
.ajax スコープの問題があると思いますか? おそらく、jQuery は$('#editor').html(content);
template.php に存在しない #editor を実行しようとしています (#editor が edit_page.php にあることを思い出してください)。.ajax の複数のレイヤーを理解するための良いリソースはありますか?
ちょっとした情報、手がかり、および私が試したこと:
- edit_page.php の最後にある TinyMCE init を除いて、すべての jQuery 関数は functions.js ファイルにあります。
- functions.js への index.php リンクのみ
- TinyMCE 3.5.6、jQuery プラグイン パッケージ、および jQuery 1.7.2 を使用しています。
- TinyMCE の疑似セレクターも (
$('textarea:tinymce')
の代わりに$('#editor')
) 試してみましたが、これは Firebug でエラーをスローします: "エラー: 構文エラー、認識されない式: tinymce" in jq.min.js (4 行目)。 - ユーザーが TinyMCE で変更を行った後、更新ボタンをクリックすると、新しいコンテンツが読み込ま
$('.edit_text')
れます。私が入力したものを読み込む代わりに、上記の「安全な」HTML を読み込みます。まるで TinyMCE が完全にバイパスされたかのように。 - CMS 全体を使用せずに、手動で「get_page.php?t=template&c=content」と FireFox に入力することから始めれば、問題なく動作します。
- TinyMCE をロードしない場合、jQuery はコンテンツをテキストエリアにロードします。
- この男は何かに取り組んでいる可能性があります...似ているようですが、彼の head.js に何が含まれているか、head.ready(); を実装する方法、または彼の問題が私のものと同じかどうかはわかりません。
これは Ajax を使用する初めてのプロジェクトなので、学ぶことがたくさんあります。洞察/提案された読書/解決策は大歓迎です!