我使用jQuery Malsup插件在ajax中发布表单数据。 http://malsup.com/jquery/form/#api
表单包含文本数据和文件数据(图像上载字段)。
我使用ajaxSubmit()
发布表单数据。所有数据都在服务器站点的php中处理。
它在chrome,FF,IE8,IE9中运行良好。如果我没有选择任何图像上传字段,ajax请求工作正常IE10。但是当选择图像时,IE10在其开发工具中显示待处理。
您可以在此处测试文件上传功能。
答案 0 :(得分:1)
无论表单是通过GET还是POST提交,IE都无法将文件数据转换为可以传输到服务器的文本字符串。
要在不重新加载页面的情况下执行文件POST,您需要以下对象: FormData,XHR.upload,File.files。 “XHR”是xmlHTTPRequest对象,“File”是文件选择器的DOM实例。
如果上述任何一项不受支持,您可以回退到常规表单POST:
if (!self.FormData||!xhr.upload||document.getElementById('file').files) {
document.getElementById('form').submit();
return;
}
然后按如下方式获取表单数据:
var fd=new FormData();
fd.append('file',document.getElementById('file').files[0]);
xhr.open('POST',...); //complete your Ajax post here
xhr.send(fd); //the form data is sent here, with the file
既然我已经解释了Ajax文件POST的机制,那么您的插件可能已经处理了不具备2级XHR功能的浏览器。嵌入插件时,请确保它在iFrame中。如果您想在文件完全上传时通知主页面,请在上传处理程序本身嵌入JavaScript调用:
parent.doneuploading();
,其中doneuploading是一个在包含页面中定义的JavaScript函数。
值得注意的是
enctype="multipart/form-data"
表单标签中的。
答案 1 :(得分:0)
我遇到了同样的问题,我的成功功能不会出现 在ajaxSubmit上调用。我最终看了jquery表单插件 代码和第65行强制你的ajaxSubmit使用GET,如果你没有 指定 form method =“post”。如果你的表格相当大,那就得到 将失败。因此,解决方法是在表单上使用method =“post” 元件。