在我的Joomla 3.3表单中,我插入了一个ajax脚本来动态更新某些表单字段。 ...脚本的主要部分是
formdata = new FormData();
jQuery.ajax({
type: "POST",
dataType: "json",
timeout: 6000,
url: "index.php?option=com_mycomponent&task=component.save",
data: formdata,
......................
........
在触发ajax脚本后,$ _POST在控制器中完全为空,我无法访问重要的formdata。
同时我尝试了几种方法,例如
formdata = new FormData($(this)[0]); => nothing happens
或
formdata = new FormData();
formdata = $(this)[0]; => nothing happens
或
formdata = new FormData();
form = $(this)[0];
formdata.append("jform", form) => this fills up my $_POST, but with value undefined
如何通过Ajax POST方法将formdata(jform对象)传递给控制器?
答案 0 :(得分:1)
尝试使用jQuery的serialize函数:
var formdata = jQuery( "#formid" ).serialize();
这里formid是表单元素的id。希望这会有所帮助..
答案 1 :(得分:0)
我认识到两个问题!
1)表单是一个子表单,显示在选项卡中。因此,不应在脚本中分配子窗体的id。您应该分配主表单的ID
2)ajax参数" contentType:false"应该被淘汰
使用此参数,ajax调用将完成其工作!
ajax脚本:
$document->addScriptDeclaration('
jQuery(document).ready(function () {
jQuery("#btn1").click(function() {
alert ("Button");
var formdata = jQuery( "#main-form" ).serialize();
jQuery.ajax({
type: "POST",
dataType: "json",
timeout: 6000,
url: "index.php?option=com_mycomponent&task=component.save",
data: formdata,
processData: false,
success:function(result) {
jQuery.each(result.data, function(i, item) {
..........
});
}
});
return false;
});
});
');
HTML:
form action="<?php echo JRoute::_('index.php?option=com_mycomponent'); ?>"
method="post" name="market_photos" id="subform-form" class="form-validate" enctype="multipart/form-data">
<fieldset class="form-horizontal">
<legend><?php echo JText::_('COM_MYCOMPONENT'); ?></legend>
<ul class="adminformlist">
<table id="table1">
<tbody>
</tbody>
</table>
</ul>
</fieldset>
<div class="span5">
<fieldset class="form-horizontal">
<legend><?php echo JText::_('COM_MYCOMPONENT'); ?></legend>
<div class="control-group">
......
....
我希望这些部分能提供更好的见解!