有一个未被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中返回一个空数组,所以实际上没有任何内容被发布到表单中。
EDIT1
似乎问题可能与表单在div中的事实有关。如果我删除页面上除表单和js之外的所有内容,它都可以正常工作。但是表单位于默认隐藏的div中,并使用另一个函数进行显示。如果它在div中,是否需要通过序列化获取表单数据的某种魔法?
编辑2
尝试添加引号和英镑符号以及所有其他爵士乐。我正在使用Web开发人员工具栏,firebug等...它不会抛出任何js错误而且不怕任何事情。
答案 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,
[...]
我要感谢学院和所有帮助过我的人。