表单中的文本区域不是使用jQueryAJAX通过POST提交的


Textarea in a form is not submitting via POST with jQuery AJAX

由于我未知的原因,我的表单没有提交键入到<textarea>中的文本。

ajax代码:

$.ajax({
type:'POST', 
url:'****.php', 
data:$('#blogForm').serialize(),
success: function(responseSubmit) { blah blah etc...

输入工作得很好,并且正确地发布到我的数据库中。

形式为:

<form id="blogForm">
                        <input type="date" name="date" id="blogDate">
                        <input type="text" name="title" id="blogTitle">
                        <textarea name="blogContent" id="blogBody"></textarea>
                        <input type="submit" name="submit" id="blogSubmit">
                    </form>

当我在firebug中检查时,我得到的POST是:date=09%2F25%2F1986&title=Title&blogContent=

正如您所看到的,blogContent是空的。为什么会这样?

我忽略了在文本区域附加一个所见即所得编辑器,名为nicEditor。显然,有一个错误迫使jQuery不序列化文本区域。一旦nicEditor被删除,它就工作得很好。谢谢你的帮助。

更改:

   data:$('#blogForm').serialize(),

收件人:

   data:$('#blogForm').find('input, select, textarea, button').serialize(), 

您的文本区域名称为blogContent,但id为blogBody。#选择器使用的是id,而不是名称。

您不需要删除编辑器-它们通常在每次击键后或表单提交时使用JS来更新隐藏的文本区域,所以只要编辑器做得对,这应该不会有什么不同。

我想问题正如菲利普所建议的那样——你的身份证和名字属性不同。其他的都很相配。当它串行化时,它必须使用ID,并且可能在另一端的脚本中,您期望名称出现(正常的表单提交会这样做)。

由于您通过$POST发送,只需执行var_dump($_POST);在你的脚本中,然后将其记录到控制台或在你的JavaScript中提醒它——看看通过AJAX向你的脚本发送了什么。

如果文本区域不在任何名称下,那么你知道问题肯定是编辑器,如果是,请尝试手动调用nicEditor的方法,它将更新隐藏的文本区域。

如果您使用的是ajaxSubmit,那么任何文本编辑器的文本区域中的POST数据都将不起作用。

所以你必须得到价值&将其放入隐藏字段,然后您可以获得如下POST值:

<textarea id="safety" name="safety" style="width:600px;height:70px"></textarea>
<input type="hidden" name="safety_precautions" id="safety_precautions">

在ajaxsubmit 之前

$('#safety_precautions').val(tinyMCE.get('safety').getContent());

在提交时添加return false

<code>
<form id="blogForm" onsubmit="return(false);">  
    <input type="date" name="date" id="blogDate">
    <input type="text" name="title" id="blogTitle">
    <textarea name="blogContent" id="blogBody"></textarea>
    <input type="submit" name="submit" id="blogSubmit">    
  </form>​
</code>

点击按钮调用ajax

$("#blogSubmit").on('click',function(){      
$.ajax({
type:'POST', 
url:'****.php', 
data:$('#blogForm').serialize(),
success: function(responseSubmit) { blah blah etc...
});