使用ajax填充CKEditor的对话框并获得响应

时间:2013-04-08 09:57:14

标签: jquery ckeditor html-object

我有一个与CKEditor对话框有关的特殊问题。我已经设法将一个php文件(包含Datatables)嵌入到对话框窗口中。然后,用户可以选择将插入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这方面的经验?

(如果我没有按照正确的条款解释所有内容,我很抱歉。)

1 个答案:

答案 0 :(得分:1)

很难得到全局,但它有点像同步/异步问题。你设置后肯定是在访问变量吗?即使在request.done之前声明CKEDITOR.dialog.add函数,在test_HTML = msg ;运行之后可能会调用实际的CKEDITOR.dialog.add,因为它是异步调用。

意味着在加载ajax时,JavaScript会继续运行并执行CKEDITOR.dialog.add,以便test_HTML保持未定义状态。尝试将其设置为在任何代码访问之前100%确定设置的默认值,然后maby尝试按照您执行代码的顺序执行流程。