通过 AJAX 上传图片,不能在 jQuery 中使用 serialize() 方法?

Posted

技术标签:

【中文标题】通过 AJAX 上传图片,不能在 jQuery 中使用 serialize() 方法?【英文标题】:Uploading image by AJAX, cannot use the serialize() method in jQuery? 【发布时间】:2014-08-07 18:25:56 【问题描述】:

我发现使用 AJAX 上传图片似乎不适用于表单中指定的 multipart,因为我用于检查它是否为 multipart() 的代码永远无法正常工作(在 Java 中);

if (context.isMultiPart() 

    System.out.println("received Multipart data");  

else

    System.out.println("not multipart data!"); /* my code always prints this message in the upload handler uploadPost() */

我有这个 html 表单:

<div class="title"><label>Upload picture!</label></div>

<form method="post" id="imageUploadForm" enctype="multipart/form-data" action="/uploadPost">
    Please specify file to upload: <input type="file" name="upfile"><br />
    <input type="submit" value="submit" id="submitButton">
</form>

<div id="imagedisplay">

</div>

以下是我的 ajax 代码,它将图像发送到地址 /uploadPost 的上传处理程序。我的 Java 代码中的 uploadPost() 方法首先确定上传是否是多部分的,但是,ajax 似乎不会将图像作为多部分发送。是不是因为我在表单上使用了jQuery的serialize()方法?

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
      <script>
        $(document).ready(function() 
            $('#imageUploadForm').submit(function(evt) 

                var formData = $('#imageUploadForm').serialize();
                $.post('/uploadPost', formData, uploadResults);
                evt.preventDefault();
            );

            // display the uploaded image on the same page
            function uploadResults(data) 
                    $('#imagedisplay').html("<img src=" + data.url + "" + data.name + ">");
                  // end of uploadResults
        );  // end of ready
        </script>

【问题讨论】:

【参考方案1】:

从 serialize() 更改为以下代码对我有用:

$('#imageUploadForm').submit(function(evt) 
                evt.preventDefault();

                var formData = new FormData(this);

                $.ajax(
                type: 'POST',
                url: $(this).attr('action'),
                data:formData,
                cache:false,
                contentType: false,
                processData: false,
                success: function(data) 
                    $('#imagedisplay').html("<img src=" + data.url + "" + data.name + ">");
                ,
                error: function(data) 
                    $('#imagedisplay').html("<h2>this file type is not supported</h2>");
                
                );
            );

【讨论】:

就像一个魅力。谢谢。我花了无数个小时才找到你的答案。谢谢 请注意,FormData 使用的是 DOM 元素,而不是 jQuery,它是 $(this)【参考方案2】:

您可以使用 Formdata() ,API DOC

代码将类似于现有问题Stack Overflow Link中给出的答案

【讨论】:

以上是关于通过 AJAX 上传图片,不能在 jQuery 中使用 serialize() 方法?的主要内容,如果未能解决你的问题,请参考以下文章

通过 jquery Ajax 上传图片到 Model Data 到 Controller MVC/Razor

img如何接收jquery ajax异步上传的动态图片

Codeigniter 图片上传使用 jquery 和 ajax 错误 [重复]

.Net之使用Jquery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径

使用 jQuery $.ajax 和 Spring Boot 上传图片的进度条

MVC Ajax.BeginForm 提交上传图片