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。
我的 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。