Javascript 如何从ajax响应更新ckeditor5中的内容

Javascript 如何从ajax响应更新ckeditor5中的内容,javascript,jquery,ajax,ckeditor,Javascript,Jquery,Ajax,Ckeditor,ckeditor 5,v1.11.1 我已草签了一名编辑,如下所示: <textarea name="content" id="editor"></textarea> <script> ClassicEditor .create( document.querySelector( '#editor' ) ) .then( editor => { console.log( editor ); } ) .cat

ckeditor 5,v1.11.1

我已草签了一名编辑,如下所示:

<textarea name="content" id="editor"></textarea>

<script>
ClassicEditor
    .create( document.querySelector( '#editor' ) )
    .then( editor => {
        console.log( editor );
    } )
    .catch( error => {
        console.error( error );
    } );
</script>
因此内容“foo”应该出现在编辑器中

但是我得到了一个没有任何内容的编辑器

如果我禁用了ckeditor——通过注释掉js的第一个块(
ClassicEditor…
)——那么它只是一个普通的文本区域,可以正确填充内容

那么如何以这种方式在编辑器中获取内容呢?

请看

您必须调用
editor.setData(…)

这里定义了
编辑器

…因此,要将该变量保持在范围内,您需要:

  • 将整个编辑器初始化部分移到Ajax回调中(替换
    $('#editor').html(response.comment)
  • 将整个Ajax调用代码移动到
    中,然后
    回调
  • 将这两个承诺包装在
    Promise.all
    中,并将编辑器和数据输出到结果数组中
注意,这不是一个实时演示,因为Stackoverflow的沙箱与CKEditor尝试使用cookie导致异常的尝试不兼容

function init_editor() {
  console.log(1);
  return ClassicEditor
    .create(document.querySelector("#editor"));
}

function get_data() {
  console.log(2);
  return $.ajax({
    url: "https://cors-anywhere.herokuapp.com/https://stackoverflow.com/humans.txt",
    method: "get"
  });
}

$(function() {
  var promises = [init_editor(), get_data()];
  Promise.all(promises).then(function(results) {
    results[0].setData(results[1]);
  });
});

我读过。这很好,但是
editor.setData()在哪里开始??不知道为什么人们会对此投反对票<代码>未捕获类型错误:editor.setData不是函数
。根据文档
编辑器
应该从初始化代码开始工作。但它并不是你所拥有的
$('#editor').html(response.comment)立即。您需要获取变量并将其存储在自己的中,以便以后可以访问它:谢谢,这是正确的,也是一个有用的响应。然而,文档并没有明确说明这一点。因此,为什么会提出这个问题。人们把它当作一个愚蠢的问题投了反对票。如果文档中说“上面示例中的编辑器变量应该启用它”,为什么有人一定知道/假设这一点呢?谢谢你。@Andy。。。您试图使用
html()
设置内容。您甚至没有尝试使用
editor.setData()
,这意味着您甚至没有查看文档了解如何执行此操作。为什么你们现在要把它变成文档的错误(这在我的书中是非常清楚的)。。。?这不像你问的那样,我正在尝试执行“editor.setData()”,但我得到了错误x
@Andy-可以合理地假设,使用名为
editor
的变量的示例使用的是上一个示例中名为
editor
的相同变量。我现在对这个问题已经有了答案,所以没有必要争论这个问题。如果您阅读了我所说的评论,那么我已经阅读了
setData()
方法,但不清楚如何在ajax请求中使用它。也许这对我来说只是其中的一天,但我认为文档中没有那么清楚地说明如何使用它——而ajax响应获取内容可能是一种常见的场景。无论如何,感谢您最有价值的输入:)顺便说一句,您还可以设置textarea内容,然后初始化编辑器。这样就不需要
setData()
{"comment":"foo"}
.then( editor => {
function init_editor() {
  console.log(1);
  return ClassicEditor
    .create(document.querySelector("#editor"));
}

function get_data() {
  console.log(2);
  return $.ajax({
    url: "https://cors-anywhere.herokuapp.com/https://stackoverflow.com/humans.txt",
    method: "get"
  });
}

$(function() {
  var promises = [init_editor(), get_data()];
  Promise.all(promises).then(function(results) {
    results[0].setData(results[1]);
  });
});