【问题标题】:Populating CKEditor's dialog with ajax AND getting response, too使用 ajax 填充 CKEditor 的对话框并获得响应
【发布时间】:2013-04-08 23:24:39
【问题描述】:

我有一个与 CKEditor 的对话框有关的特殊问题。我设法将一个 php 文件(包含数据表)嵌入到对话框窗口中。然后,用户可以选择将插入到 CKEditor 中的行。

将 HTML 嵌入对话窗口似乎很容易:

CKEDITOR.dialog.add( 'tableDialog', function( editor ) {
    return {
        title: 'parametres',
        minWidth: 800,
        minHeight: 500,
        contents: [
            {
                id: 'tab-basic',
                label: 'Basic Settings',
                elements: [
                    {
                    type:"html",
                    id:"htmlPreview",
                    style:"width:95%;height:95%;",
                    html:test_HTML,
                        commit: function( element ) {
etc..

有趣的是,填充变量“test_HTML”很棘手。将其定义为 HTML 对象非常有效:

test_HTML = '<object type="text/html" data="http://entseditor.etest.ee/edit/mm_insert.php" style="width:100%; height:100%"><p></p></object>';

,使用 jQuery ajax 会失败:

var request = $.ajax({
  url: "http://entseditor.etest.ee/edit/mm_insert.php",
  //type: "POST",
  //data: {id : menuId},
  dataType: "html"
});

request.done(function(msg) {
  //$("#asdasd").html( msg );
    test_HTML =  msg ;
  //alert( 'success' + test_HTML );
});

request.fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

(请求很好,并且对 id='asdasd' 给出了正确的响应,但 CKEditor 对话框窗口显示:“未捕获的 TypeError:无法调用未定义的方法 'charAt'”。两个 HTML 看起来仍然相同。)

现在使用该对象没有问题,但我似乎无法从创建的#document 获得响应。我尝试过变量和隐藏字段,但无法从“父”文档中访问它们..

有人对 CKEditor 这方面有经验吗?

(对不起,如果我没有正确解释所有内容..)

【问题讨论】:

  • 好吧,丑陋的解决方案当然是将变量存储在 cookie 中(我应该知道),这样问题就解决了。但我仍然希望有一个漂亮的解决方案:)

标签: jquery ckeditor html-object


【解决方案1】:

很难了解全局,但感觉有点像同步/异步问题。您是否在设置变量后确定访问该变量?即使request.done 函数在CKEDITOR.dialog.add 之前声明,实际的test_HTML = msg ; 也可能在CKEDITOR.dialog.add 运行之后被调用,因为它是一个异步调用。

这意味着当 ajax 加载时,JavaScript 会继续运行并执行 CKEDITOR.dialog.add,因此 test_HTML 仍然未定义。尝试将其设置为默认值,确保在任何代码访问它之前设置为 100%,并且可能尝试遵循执行代码的顺序。

【讨论】:

  • 该死的 Nenotlep :) 你完全正确!我以为我已经检查过了,确实,我的 test_HTML 有时已设置,有时未设置,所以这就是问题所在。尽管如此,对话框的行为很有趣,因为(使用完全相同的 HTML)它现在给了我而不是 charAt 错误,这是 id="cke_126_uiElement" class="cke_dialog_ui_html" style="width:95%; height :95%”。不幸的是,我没有时间弄清楚,并且 cookie 方法有效,但我相信它可以按照您指出的方式解决。感谢您的帮助。
  • 很高兴能帮上忙!我不能说新错​​误,但希望它会起作用:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 2015-06-20
相关资源
最近更新 更多