Ajax 第一次尝试不发送文本区域 (CKEditor) 的值,但第二次尝试发送它

Ajax doesn't send the value of a textarea (CKEditor) on the first try, but it sends it on the second try

我的 HTML 中有一个加载 CKEditor 4 的文本区域。然后我会将 HTML 表单的数据发送到处理输入的 PHP 文件。

       $.ajax({
            xhr: function(){
                //blah blah blah
                return XHR;
            },
            type: "POST",
            url: "process.php",
            data: formData,
            processData: false,
            contentType: false,
            mimeType: "multipart/form-data",
            success: function (response) {
                //blah blah blah
            },
            error: function(XHR, textStatus, error){
               //blah blah blah
            }
        });

在 PHP 文件中,我首先清理所有输入,然后将它们传递给数据库。事实证明,在我第一次按下提交按钮时,我页面中名为 "description" 的文本区域的值不是通过 ajax 发送的(我已经通过编写内容验证了这一点$_POST[] 在服务器上的一个文件中以方便调试过程)但是我第二次按下我的 HTML 表单上的提交按钮时,描述文本区域的值被毫无问题地发送了!

我首先假设这可能是由于描述文本区域的值包含 HTML 代码并且被 PHP 清理过。但是我为它移除了卫生设施,问题仍然存在。到目前为止,我已经编写了数千行代码,但如果需要,我不介意透露更多代码。我只是避免这样做以防止此 post 变得不必要地长。

感谢任何帮助。提前致谢。

编辑 这是我填写 formData 变量的方式:

   $("#form").submit(function (event) {
        event.preventDefault();
        var formData = new FormData(this);
        loading_start();
        submitForm(formData);
    });

并且我需要在提交此表单的同时上传文件。

如果不需要上传文件到服务器,尝试使用.val()函数获取textarea内容。

我发现了导致这种奇怪行为的问题。为了将来参考,需要更新 CKEditor,然后才能提交保存其数据的文本区域的值。要强制 CKEditor 自行更新,可以使用以下代码:

   for(var instanceName in CKEDITOR.instances)
            CKEDITOR.instances[instanceName].updateElement();

以上代码归功于发布它的用户 here