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脚本将文件发送到控制器。 我有尝试,但我不知道什么是错的,我怎么能这样做。
答案 0 :(得分:1)
如果您发送文件,则不应使用dataType: "JSON"
。
您可以使用(filesForm =表单名称)形成data
请求:
var formData = new FormData(document.forms.filesForm);
然后添加其他键:
formData.append("key", keyValue);
并发送此数据,将此选项添加到ajax调用:
contentType: false,
cache: false,
processData: false,
如果您希望上传文件,则需要contentType = false(实际上它将是multipart / form-data)。 最后的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)
}
});