2013-04-08 101 views
2

我有一个与CKEditor对话框有关的特殊问题。我设法将一个php文件(包含Datatables)嵌入到对话窗口中。然后用户可以选择一个将被插入到CKEditor中的行。使用ajax填充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阿贾克斯这样做会失败:

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似乎是相同的。)

现在没有问题使用该对象,但后来我似乎无法得到响应从创建的#文档。我尝试过变量和隐藏字段,但他们不能从'父'文档访问..

有没有人有CKEditor的这方面的经验?

(对不起,如果我没有解释正确的术语一切..)

+0

好吧,丑陋的解决方案当然是将变量存储在cookie中(正如我应该知道的那样),所以问题就解决了。但我仍然希望有一个美丽的解决方案:) – Konservin 2013-04-08 13:13:28

回答

1

很难获得大画面,但那种感觉就像一个同步/异步问题。设置后你是否确实访问变量?即使在CKEDITOR.dialog.add之前声明request.done函数,实际test_HTML = msg ;可能会在CKEDITOR.dialog.add由于异步调用而运行之后被调用。

这意味着,虽然Ajax加载JavaScript一直运行,并执行CKEDITOR.dialog.add,使test_HTML保持未定义。尝试将其设置为在任何代码访问之前将其设置为100%的默认值,并尝试按照您执行代码的顺序执行的流程。

+0

该死的你Nenotlep :)你是绝对正确的!我以为我已经检查过,事实上,我的test_HTML有时会被设置,有时候不会,所以这就是问题所在。尽管如此,对话框的行为很有趣,因为(使用完全相同的HTML),它现在给我的不是charAt错误,而是一个无错的乱码:_id =“cke_126_uiElement”class =“cke_dialog_ui_html”style =“width:95%; height:95% “_。不幸的是,我没有时间弄清楚,cookie方法有效,但我相信它可以按照您指出的方式解决。谢谢你的帮助。 – Konservin 2013-04-09 08:31:06

+0

很高兴为您服务!我不能说新的错误,但希望它会工作:) – Nenotlep 2013-04-09 09:31:41