Javascript 使用java脚本提交按钮提交包含文件的表单

Javascript 使用java脚本提交按钮提交包含文件的表单,javascript,ajax,model-view-controller,form-serialize,Javascript,Ajax,Model View Controller,Form Serialize,java脚本: 我有一个表单,它通过ajax调用将值提供给控制器。 表单在ajax调用中被序列化,控制器在成功时返回“true”,但问题是我的表单有一个文件,而该文件无法序列化。我正在研究如何使用这个ajax调用在控制器中接收文件 function save() { if(save_method == 'On_submitted') { url = "<?php echo site_url('MyController/insertForm')?>

java脚本: 我有一个表单,它通过ajax调用将值提供给控制器。 表单在ajax调用中被序列化,控制器在成功时返回“true”,但问题是我的表单有一个文件,而该文件无法序列化。我正在研究如何使用这个ajax调用在控制器中接收文件

function save()
{    
if(save_method == 'On_submitted') 
    {
          url = "<?php echo site_url('MyController/insertForm')?>";
            $.ajax({
                url : url,
                type: "POST",
                data:$('#form_name').serialize(),
                dataType: "JSON",
                success: function(data)
                {

                    if(data.status) //if success close modal and reload ajax table
                    {
                        $('#modal_name').modal('hide');
                        alert('added successfully');
                        reload_table();
                    }
                    else
                    {
                        for (var i = 0; i < data.inputerror.length; i++) 
                        {
                            $('[name="'+data.inputerror[i]+'"]').parent().parent().addClass('has-error'); //select parent twice to select div form-group class and add has-error class
                            $('[name="'+data.inputerror[i]+'"]').next().text(data.error_string[i]); //select span help-block class set text error string
                        }
                    }
                    $('#btnSave').text('save'); //change button text
                    $('#btnSave').attr('disabled',false); //set button enable 


                },
                error: function (jqXHR, textStatus, errorThrown)
                {
                    alert('Error adding / update data');
                    $('#btnSave').text('save'); //change button text
                    $('#btnSave').attr('disabled',false); //set button enable 

                }
            });

    }
}
当我省略输入文件字段时,主要问题是通过java脚本将文件发送到控制器。 我尝试过,但我不知道是什么错了,我怎么能做到

如果发送文件,则不应使用dataType:JSON

您可以使用filesForm=表单名称为请求生成数据:

var formData = new FormData(document.forms.filesForm);
然后添加其他键:

formData.append("key", keyValue);
要发送此数据,请将以下选项添加到ajax调用:

contentType: false,
cache: false,
processData: false,
您需要contentType=false,如果您希望上载文件,它实际上将是多部分/表单数据。 最后一个ajax调用应该是这样的:

$.ajax({
    url: url,
    data: formData,
    contentType: false,
    cache: false,
    processData: false,
    type: 'POST',
    success: function (result) {
        $("#result").html(result)
    },
    error: function (result) {
        $("#result").html(result)
    }
});

data:formData,其中我将从var formData=new FormDatadocument.forms获取formData中的值。;它将从窗体中获取所有数据,例如,如果窗体有2个文件输入和一个文本输入,则此formData对象将具有所有这3个参数,以检查use formData.getinput\u name是否工作!console.logformData.getinput\u名称;如果输入为空,输入的名称是什么?属性???您应该有这样的表单:不要忘记更改表单的name属性,并且输入ajax调用没有到达控制器。我已在控制器中将json状态值设置为TRUE。但我无法在ajax回调中检索它。。。我的意思是控制器不可访问,因为我将其作为未定义的alertstatus:+data.status;在ajax成功函数中。我在ajax表单console.logformData.getfile中获得了价值;