ckeditor不会发布更新的内容

时间:2017-03-06 15:07:52

标签: jquery ajax ckeditor

我正在使用ckeditor 4.6.2并遇到一个问题,如果我更改编辑器中的内容,它们不会通过ajax调用回发到服务器。

我的设置是这样的:

  • 标识为#editor1的文字区域已应用了ckeditor。
  • 在页面加载时,我使用ajax从数据库中将一些内容加载到编辑器中(这一切都正常)。
  • 我的提交按钮的ID为#sendBtn

然后我使用ajax处理表单提交 - 按#sendBtn。该帖子有效,但如果我在#editor1中编辑了内容,则会提交原始内容 - 页面加载时的内容,而不是编辑过的内容。

我穿过这篇文章How to ajax-submit a form textarea input from CKEditor?。我在ajax电话会议之前添加了接受的答案。所以我处理提交的jquery看起来像这样:

$('#sendBtn').click(function(e) {
    e.preventDefault();
    $('#sendBtn').prop( "disabled", true);
    var dataString = $("#emailForm").serialize();

    /**
     * https://stackoverflow.com/questions/3256510/how-to-ajax-submit-a-form-textarea-input-from-ckeditor 
     */
    for ( instance in CKEDITOR.instances )
        CKEDITOR.instances[instance].updateElement();

    $.ajax({
        url: "/admin/ajax/email",
        data: dataString,
        method: "POST",
      }).done(function(data) {
          // ...
      });
});

如果我使用PHP在/admin/ajax/email转储POST数据,则会显示原始内容,而不是更新版本。

奇怪的是,如果我在浏览器控制台中运行它,它会返回true然后看起来有效:

for ( instance in CKEDITOR.instances )
    CKEDITOR.instances[instance].updateElement();

在进行ajax调用之前,上述代码是否未完成?我该如何处理?

1 个答案:

答案 0 :(得分:0)

好一点。

正如您的(非常有帮助的)参考所示,您必须在触摸表单之前更新CKEDITOR实例,所以:

$('#sendBtn').click(function(e) {
    e.preventDefault();
    $('#sendBtn').prop( "disabled", true);

    // This before:
    for ( instance in CKEDITOR.instances )
        CKEDITOR.instances[instance].updateElement();

    // Then this:
    var dataString = $("#emailForm").serialize();

    $.ajax({
        url: "/admin/ajax/email",
        data: dataString,
        method: "POST",
      }).done(function(data) {
          // ...
      });
});