【问题标题】:How to pass Joomla form data via Ajax call to controller function如何通过 Ajax 调用将 Joomla 表单数据传递给控制器​​函数
【发布时间】:2014-05-20 06:45:49
【问题描述】:

在我的 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 方法将我的表单数据(jform 对象)传递给控制器​​?

【问题讨论】:

    标签: javascript ajax view joomla http-post


    【解决方案1】:

    尝试使用jQuery的序列化功能:

    var formdata = jQuery( "#formid" ).serialize();
    

    这里的formid是表单元素的id。希望这会有所帮助..

    【讨论】:

    • 还是同样的问题! $_POST 最终为空 :-(
    • 你能把你的html、脚本和动作代码放在这里吗?
    • $document->addScriptDeclaration(' jQuery(document).ready(function () { jQuery("#btn1").click(function() { alert ("Button"); var formdata = jQuery( "#market_photo-form" ).serialize(); jQuery.ajax({ type: "POST", dataType: "json", timeout: 6000, url: "index.php?option=com_mycomponent&task=component.save" , 数据: formdata, processData: false, contentType: false, success:function(result) { jQuery.each(result.data, function(i, item) { .......... }); } } ); 返回 false; }); }); ');
    • 现在是 html 部分:form action="" method="post" name="market_photos" id="market_photo-form" class="form-validate" enctype="multipart/form-data">
        .....
    【解决方案2】:

    我发现了两个问题!

    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">
    
    ......
    ....
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      相关资源
      最近更新 更多