我有一个包含3个文件输入的表单。我想通过jquery.i尝试在jquery中尝试序列化函数发送它,但我意识到这个函数不发送文件输入!
这是我的表格:
<form id="submit_pics" action="#" >
file 1 : <input name="file1" id="file1" type="file" /><br />
file 2 : <input name="file2" id="file2" type="file" /><br />
file 3 : <input name="file3" id="file3" type="file" /><br />
<br />
<div>
<a id="submit" href="javascript:;" ><img src="uploads/images/button1.png" /></a>
</div>
</form>
这是我的javascript代码:
<script type="text/javascript">
$(document).ready(function(){
$("#level3").click(function(event) {
var str = $("#submit_pics").serialize();
$.ajax({
type: "POST",
url: "track.php",
data: str,
success: function(theResponse) {
$('#req_result').html(theResponse);
}
return false;
});
});
答案 0 :(得分:6)
经过一番研究后,我发现你可以用:
$.ajax({
url: 'track.php',
type: 'POST',
data: new FormData($("#submit_pics")[0]),
processData: false,
contentType: false
}).
我是Java程序员(Liferay),在服务器中我使用它来获取文件:
UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request);
File File1 = uploadRequest.getFile("file1");
File File2 = uploadRequest.getFile("file2");
我在php中存在类似的东西。
答案 1 :(得分:5)
很遗憾,您无法通过XMLHttpRequest上传文件。 AJAX实际上并不将表单发布到服务器,它以POST或GET请求的形式发送选定的数据。 Javascript无法从用户计算机获取文件并将其发送到服务器
您可以使用棘手的解决方法,将请求(不使用AJAX)发布到隐藏的iframe。
看一下 TUTORIAL
答案 2 :(得分:0)
你应该看一下JQuery Form Plugin。有了它,您可以轻松地以编程方式提交任何表单。
答案 3 :(得分:-1)
您无法通过$.ajax()
执行此操作,但可以使用此uploadify plugin。
答案 4 :(得分:-1)
此代码对我有用
_private.saveFile=function(){
var formElement = $("#formId")[0];
var _params = new FormData(formElement),
_url = $(formElement).attr("action");
_private.postFile(_url,_params,function(data,error){
console.log(data);
console.log(error);
});
}
_private.postFile=function(_urlService,_parameters,callback){
var _url= _public.getPath()+_urlService;
_private.httpPostFile(_url,callback,_parameters);
};
_private.httpPostFile=function(_url,callback,_data){
$.ajax({
url: _url,
type: 'POST',
data: _data,
mimeType: "multipart/form-data",
contentType: false,
cache: false,
processData: false,
success: function (data, textStatus, jqXHR) {
callback(data,null);
},
error: function(xhr, status, error) {
console.log('error ',error);
console.log('status ',status);
console.log('xhr ',xhr);
callback(null,error);
}
});
}