JQuery form.serialize()返回空字符串,即使为表单元素定义了name属性
这似乎是一个简单的问题,但现在已经是我头疼的时候了。 我有一个表单,它使用ajax接受用户提交到服务器的文件。我面临的问题是JQuery form.serialize()返回空字符串,即使为表单元素定义了name属性,jquery,html,ajax,forms,serialization,Jquery,Html,Ajax,Forms,Serialization,这似乎是一个简单的问题,但现在已经是我头疼的时候了。 我有一个表单,它使用ajax接受用户提交到服务器的文件。我面临的问题是$(this).serialize(),它总是返回空字符串。我已经为输入字段定义了name属性。功能也似乎是正确的,谁能指出,如果我遗漏了什么 在这方面已经有很多类似的que,但大多数答案说它需要已经存在的name属性 表格: 显然,serialize方法将表单字段数据放在一个字符串中,该字符串符合用于将表单提交给服务器进行处理的application/x-www-form
$(this).serialize()
,它总是返回空字符串。我已经为输入字段定义了name属性。功能也似乎是正确的,谁能指出,如果我遗漏了什么
在这方面已经有很多类似的que,但大多数答案说它需要已经存在的name属性
表格:
显然,serialize方法将表单字段数据放在一个字符串中,该字符串符合用于将表单提交给服务器进行处理的application/x-www-form-urlencoded内容类型,而文件是在多部分/表单数据内容类型中编码的请求中提交的,因此serialize忽略文件输入 有关信息,请参阅: 在处理文件上载时,包括
enctype=“多部分/表单数据”
。使用ajax时,可以调用并使用FormData
object。所以事情会是这样的
var formFile = new FormData();
formFile.append('file',$( '#id_of_fileinput' )[0].files[0] );
$.ajax({
url: path_to_php,
type:"POST",
data: formFile,
dataType: "json",
processData: false, //important to include when uploading file
contentType: false, //important to include when uploading file
beforeSend: function(){
$('.loading').show();
$('.masked').show();
},
success: function(data){
//do something with data
console.log(data);
$('.loading').hide();
$('.masked').hide();
}
});
谢谢,尽管我从浏览器控制台上的
$('#id_of_fileinput')[0].files[0])
获取了文件详细信息,但在服务器上它是空的。。我在服务器端使用python-Flask框架。对图像进行一些自定义操作。服务器端工作正常,如果我做正常的表单提交。面对ajax的问题。接收详细信息的python代码-request.form.get('file')
任何建议?在ajax中,这个过程应该很好。唯一的区别是服务器端的处理。这篇文章可能会帮助您了解python和flask框架。
$(document).ready(function () {
$('#upload-form').on('submit', function(e) {
e.preventDefault();
console.log($(this).serialize());
$.ajax({
url : $(this).attr('action'),
type: "POST",
data: $(this).serialize(),
success: function (data) {
console.log(data);
},
error: function (jXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
});
var formFile = new FormData();
formFile.append('file',$( '#id_of_fileinput' )[0].files[0] );
$.ajax({
url: path_to_php,
type:"POST",
data: formFile,
dataType: "json",
processData: false, //important to include when uploading file
contentType: false, //important to include when uploading file
beforeSend: function(){
$('.loading').show();
$('.masked').show();
},
success: function(data){
//do something with data
console.log(data);
$('.loading').hide();
$('.masked').hide();
}
});