Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery form.serialize()返回空字符串,即使为表单元素定义了name属性_Jquery_Html_Ajax_Forms_Serialization - Fatal编程技术网

JQuery form.serialize()返回空字符串,即使为表单元素定义了name属性

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

这似乎是一个简单的问题,但现在已经是我头疼的时候了。 我有一个表单,它使用ajax接受用户提交到服务器的文件。我面临的问题是
$(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();
            }
   });