【发布时间】:2013-07-04 02:53:00
【问题描述】:
我会尽量让这个问题变得简单。我想通过使用 JQuery 的 AJAX 提交上传文件和额外的表单数据(但也让它与 ie 7 或 ie 8 兼容,并且也是异步的)
如果提交不是通过 JQuery 进行的 AJAX 提交,则该过程可以正常工作。即我做了以下事情:
- 已声明 CommonsMultipartResolver
- 在控制器中写了这个处理方法
@RequestMapping(value="/processfileupload", method = RequestMethod.POST) public @ResponseBody String handleFileUpload(UploadForm data, BindingResult result) throws Exception {
....
}
UploadForm 是我绑定到表单的 Spring MVC 表单对象。此外,我将 formObject 绑定在 Spring 的表单标签中,如下所示:enctype="multipart/form-data" .. etc..
就像我说的那样,如果不是通过 JQuery 的 Ajax 调用来完成,它就可以完美地工作。一旦我尝试使其成为 Ajax 调用,该文件始终为空。
这是通过 JQuery 进行的 Ajax 调用
函数 submitFileUploadViaAjax() {
$.ajax({
url: "processfileupload",
data: $("#file_upload_form").serialize(),
type: "POST",
processData: false,
contentType: false,
success: function(data) {
$(response).html(data);
},
error: function (xhr, ajaxOptions, thrownError) {
if (xhr.readyState == 0 || xhr.status == 0) {
// not really an error
return;
} else {
alert("XHR Status = "+xhr.status);
alert("Thrown Error = "+thrownError);
alert("AjaxOptions = "+ajaxOptions)
}
}
});
}
我怀疑问题可能是:data: $("#file_upload_form").serialize(),
我已经阅读了一些建议的解决方案,供那些有类似问题的人使用 formData 对象,但我读到这与 IE 7 或 IE 8 不兼容,这是真的吗?
我还阅读了 JQuery 文件上传插件可以工作 (https://github.com/blueimp/jQuery-File-Upload/wiki/How-to-submit-additional-form-data) 但我不确定我是否能够使用 spring 将表单数据绑定到表单对象的好方法将其连接到 spring然后将其注入控制器。
是否有人对上传文件(相对较小)+ 有一些表单数据的最佳方式有想法,并且能够在 spring mvc 控制器中使用单个端点来处理这个?该解决方案使其与大多数浏览器兼容,但尤其适用于 ie 7 或 ie 8(这是在这些浏览器中工作的要求。)
非常感谢!
- 罗科
【问题讨论】:
-
好吧,我自己想通了。我使用了 JQuery Form Plugin,并且我读过它会与 IE 以及大多数其他浏览器兼容。它甚至可以很好地与 Spring MVC 配合使用,所以我很高兴!
-
嗨,罗科。你是如何使用 jQuery 表单插件的?我遇到了和您在帖子中提到的相同的问题。但正如你所说,你已经解决了它,我很感兴趣你是如何做到的。请您用您的解决方案来满足我吗?谢谢