2

我有一个与 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 对话框窗口显示:“未捕获的类型错误:无法调用未定义的方法 'charAt'”。而且两个 HTML 看起来仍然相同。)

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

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

(如果我没有以适当的方式解释所有内容,我很抱歉..)

4

1 回答 1

1

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

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

于 2013-04-08T15:24:39.297 回答