我用多层 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 的任何好的资源?
花絮,线索和我尝试过的事情:
- 我所有的 jQuery 函数都在一个 functions.js 文件中,除了 TinyMCE init,它位于 edit_page.php 的末尾。
- 只有 index.php 链接到 functions.js
- 我正在使用 TinyMCE 3.5.6、jQuery 插件包和 jQuery 1.7.2。
- 我也尝试过 TinyMCE 的伪选择器(
$('textarea:tinymce')
而不是$('#editor')
),它在 Firebug 中引发错误:jq.min.js 中的“错误:语法错误,无法识别的表达式:tinymce”(第 4 行)。 - 用户在 TinyMCE 中进行更改后,更新按钮会将新内容加载到
$('.edit_text')
单击的内容中。它没有加载我输入的内容,而是加载了上面提到的“安全”HTML——就好像 TinyMCE 完全被绕过了一样。 - 如果我不使用整个 CMS 并首先在 FireFox 中手动输入 `get_page.php?t=template&c=content' 就可以了。
- 如果我不加载 TinyMCE,jQuery 会将内容加载到 textarea
- 这家伙可能正在做某事......看起来很相似,但我不确定他的 head.js 包含什么,如何实现 head.ready();,或者他的问题是否与我的相同。
这是我第一个使用 Ajax 的项目,所以我有很多东西要学。任何见解/建议阅读/解决方案将不胜感激!