ajax js序列化不读表单元素

时间:2009-10-02 17:19:02

标签: php javascript ajax forms prototypejs

有一个未被serialize()函数读取的表单。



 <script type="text/javascript">
 function submitTrans1(){
  var formData = $('form1').serialize();
  var options = {
   method:'post',
   postBody:'formData',
   onCreate: function(){alert(formData)},
      onSuccess: function(transport){alert("onSuccess alert \n" + transport.responseText);},
   onComplete: function(){alert('complete');},
   onFailure: function(){alert('Something went wrong...')}
   }

  new Ajax.Request('/clients/addTrans/<?=$clientID123?>/',options);
 }
 </script>
  <?php
  $datestring = "%Y-%m-%d";
  $time = time();
  $clid1 = $this->uri->segment(3);
  ?>
  <form name="form1" id="form1">
   <div id="addTransDiv" style="display:none">

     <div class="">
      <label for="transDesc" id="transDesc" value="sadf" class="preField">Description</label>
      <textarea cols="40" rows="3" id="transDesc" value="" name="transDesc" class=""></textarea>
     </div>
     <div class="">
      <label for="date" class="preField">Date</label>
      <input type="date" id="transDate" name="date" value="<?=mdate($datestring, $time);?>" size="40" class=""/><br/>
     </div>
     <div class="">
      <label for="userfile" class="preField">File</label>
      <input type="file" name="transFile" id="userfile" size="20" /><br>
     </div>
     <input type="button" id="submitTrans" name="submitTrans" value="Submit" onclick="submitTrans1()">

   </div>
  </form>

呃,我在Ajax.Request的onSuccess参数中有一个警告,它会理想地警告分配给序列化表单的变量。但是,当它发出警报时,它什么也不提醒。我还有处理url打印出$ _POST数据以防万一,但这也会在responseText中返回一个空数组,所以实际上没有任何内容被发布到表单中。

THX。

EDIT1

似乎问题可能与表单在div中的事实有关。如果我删除页面上除表单和js之外的所有内容,它都可以正常工作。但是表单位于默认隐藏的div中,并使用另一个函数进行显示。如果它在div中,是否需要通过序列化获取表单数据的某种魔法?


编辑2

尝试添加引号和英镑符号以及所有其他爵士乐。我正在使用Web开发人员工具栏,firebug等...它不会抛出任何js错误而且不怕任何事情。

3 个答案:

答案 0 :(得分:0)

尝试从postBody字段中的变量名formData周围删除引号。

Firefox中的Web开发人员工具栏与调试客户端javascript的任何内容一样有用。

BTW,该片段包含一些未定义的项目,如JS函数showTransAdd(),几个PHP变量,PHP函数mdate()以及原型库的包含。

答案 1 :(得分:0)

更改此行:

var formData = $('form1').serialize();

到此:

var formData = $('#form1').serialize();

我不得不改变其他一些东西来制作工作副本,但我不确定你保留的所有代码或你的环境可能有何不同。如果这不起作用,我可以向您发送我使用的完整代码段。

答案 2 :(得分:0)

错误的表格会破坏。

我在表格中没有tr或td的表格(不确定最后一部分是否重要)并且在删除表格标签后,一切正常。

相关的js现在看起来像:

var formData = $('form1').serialize();
var options = {
   method:'post',
   postBody:formData,
 [...]

我要感谢学院和所有帮助过我的人。