Javascript 如何从ajax响应更新ckeditor5中的内容
ckeditor 5,v1.11.1 我已草签了一名编辑,如下所示: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
<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]);
});
});