通过 Ajax 提交文件上传
Submit file upload via Ajax
我正在尝试将二进制文件上传到服务器,但避免在服务器响应时完全刷新页面。我对这类事情远没有经验,所以我做事方式的一切都可以纠正。
这就是我所做的。
我有这样的 HTML:
<form id='form'>
<input type='file' id='filename'></input>
<input type='submit' onclick='doTheBusiness'></input>
</form>
我有这样的javascript:
function doTheBusiness () {
var url = '/target.html?arg1=' + val1 + '&arg2=' + val2;
var fd = new FormData ($('#filename')[0]);
$.each (
$.ajax ({
'url': url,
'type': 'post',
'processData': false,
'contentType': 'multipart/form-data',
'success': success-routine,
'data': {
'formData': fd
}
});
}
在我添加'processData': false
之前,我收到了来自Firefox和Chrome的异常,这似乎是由于ajax函数试图序列化我的FormData
对象引起的。当我研究解决这个问题时,我发现如果我没有'contentType': 'multipart/form-data'
它将默认为application/x-www-form-urlencoded
,我认为这对文件内容没有任何用处。完成所有这些操作后,我发现如果我像在其他地方那样将它们放入 'data'
对象中,我就无法访问服务器上的arg1
和arg2
参数,所以我将它们手动编码到 URL 中。
不幸的是,它不起作用。使用 Firefox,我现在在服务器上看不到请求。Chrome 和 IE11 发送了请求,但当我致电apreq_body
查看是否可以访问上传的文件数据时,我会收到Internal apreq error
。我已经浏览了mod_apreq
代码,发现Internal apreq error
对应于APREQ_ERROR_GENERAL
,但该错误似乎只是它所说的,一个一般的错误代码,我不喜欢尝试遵循所有可能生成它的地方的想法。
(我已经看过如何在jQuery中使用Ajax请求发送FormData对象?它指出了'processData'
和'contentType'
属性。
推测我错误地构建了请求,Firefox(默默地)拒绝发送它是如此错误。Chrome和IE11正在发送请求,但Apache无法解析它。(这可能是导致我在尝试访问参数时出现问题的原因,一旦我设法正确发送文件内容,我就可以将它们移回'data'
对象。
请帮助我更正此代码,并允许我上传二进制文件,除了原版jQuery之外,没有任何其他外部脚本;我怀疑即使升级到比jquery.1.7.2.min.js晚的版本对我的雇主来说也太过分了。
- 进程数据和内容类型需要为假
-
构造函数将窗体作为参数而不是文件输入。
var fd = new FormData ($('#form')[0]);
-
将表单数据对象作为数据参数传递。
'data': fd,
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 使用ajax上传的文件返回错误,但使用c#在asp.net的服务器端正常提交的文件
- Firefox,如何提交表单触发文件下载,但停留在网页上
- html5拖放文件-在提交整个表单时上传
- javascript下载一个文件并执行提交操作
- 如何在不重新加载页面的情况下选择文件提交表单
- 应将缩小的文件提交到源代码管理中
- Django View 无法使用请求获取文件.来自 ajax 表单的文件提交
- JQuery 通过表单输入类型=“文件”提交后检测插入的图像
- 如何使用jquery发布文件提交
- 使用JSP从外部Javascript文件提交变量
- Fin上传程序在用户对文件提交做出响应后取消上传
- 用javascript将输入文件提交到服务器端
- 向php文件提交angular表单
- php文件中的多个表单和文件提交
- jquery验证表单字段,但不向目标文件提交表单数据
- 文件提交有问题
- Javascript文件提交导致php脚本服务器错误
- 从Angular应用到Express Web Server的文件提交
- 剑道文件上传并没有将所有上传的文件提交给控制器以保存在IE11上