如何通过Ajax调用将Joomla表单数据传递给控制器​​函数

时间:2014-05-20 06:45:50

标签: javascript ajax view joomla http-post

在我的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对象)传递给控制器​​?

2 个答案:

答案 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">

......
....

我希望这些部分能提供更好的见解!