在我的输入文件类型字段中获取空值

Getting a null value in my input file type field

我下载了一个网络应用程序,我发现它是使用 Smarty 模板引擎创建的。我想在创建新公司时添加一个头像字段,所以我在现有的 <form> 中添加了 enctype="multipart/form-data"<input type="file" name="avatar"> 并且我还在我的 companies table 中添加了 avatar我的数据库。这是 HTML 代码:

<form class="form-horizontal" id="ib_modal_form" enctype="multipart/form-data">

        <div class="form-group"><label class="col-lg-4 control-label" for="company_name">{$_L['Company Name']}<small class="red">*</small></label>
            <div class="col-lg-8"><input type="text" id="company_name" name="company_name" class="form-control" value="{$val['company_name']}"></div>
        </div>

        <div class="form-group"><label class="col-lg-4 control-label" for="avatar">{$_L['Avatar']}</label>
            <div class="col-lg-8"><input type="file" name="avatar"></div>
        </div>


        <div class="form-group"><label class="col-lg-4 control-label" for="email">{$_L['Email']}</label>
            <div class="col-lg-8"><input type="text" id="email" name="email" class="form-control" value="{$val['email']}"> </div>
        </div>
    </form>

</div>
<div class="modal-footer">
    <button type="button" data-dismiss="modal" class="btn btn-danger">{$_L['Cancel']}</button>
    <button class="btn btn-primary modal_submit" type="submit" id="modal_submit"><i class="fa fa-check"></i> {$_L['Save']}</button>
</div>  

我发现当点击“保存”按钮时,表单转到了这段 javascript 代码:

$modal.on('click', '.modal_submit', function(e){

            e.preventDefault();

            $.post( _url + "contacts/add_company_post/", $("#ib_modal_form").serialize())
                .done(function( data ) {

                    if ($.isNumeric(data)) {

                        location.reload();

                    }

                    else {
                        $modal.modal('loading');
                        toastr.error(data);
                    }

                });

        });

控制器中的代码如下:

case 'add_company_post':

    $data = ib_posted_data();
        $company = Model::factory('Models_Company')->create();
    $company->company_name = $data['company_name'];
    $company->url = $data['url'];
    $company->email = $data['email'];
    $company->phone = $data['phone'];
    $company->logo_url = $data['logo_url'];
    $company->avatar = $_FILES['avatar']['name'];

    $company->save();
    break;

问题是它无法识别控制器中的 $_FILES['avatar']['name']; 每当我添加一家新公司时,我的数据库中都会得到一个 NULL 值。我似乎无法解决这个问题。任何帮助,将不胜感激。谢谢。

改变

来自

$("#ib_modal_form").serialize()

new FormData($("#ib_modal_form")[0])

您应该使用 FormData 使用 ajax 上传文件。 $(form).serialize() 只会给你键和值。

你能改变你的 ajax 调用方式吗

$modal.on('click', '.modal_submit', function(e){

        e.preventDefault();

        var formData = new FormData($("#ib_modal_form")[0]);

        $.ajax({
            url: _url + "contacts/add_company_post/",
            type: 'POST',
            data: formData,
            cache: false,
            contentType: false,
            processData: false,
            success: function (data) {
                if ($.isNumeric(data)) {

                    location.reload();

                }

                else {
                    $modal.modal('loading');
                    toastr.error(data);
                }
            },
        });

    });