我正在尝试通过 jQuery 提交表单。我的表单包含必须上传的字段和文件。它是类型ENCTYPE="multipart/form-data"
。
我可以使用以下方法接收所有字段值:post = $('#myForm').serialize();
但是如何接收$_FILES
数组?我需要这个来处理上传的文件。
这可以使用 jQuery 吗,如果可以,怎么做?还是我需要为 jQuery 使用特殊的上传插件?
我正在尝试通过 jQuery 提交表单。我的表单包含必须上传的字段和文件。它是类型ENCTYPE="multipart/form-data"
。
我可以使用以下方法接收所有字段值:post = $('#myForm').serialize();
但是如何接收$_FILES
数组?我需要这个来处理上传的文件。
这可以使用 jQuery 吗,如果可以,怎么做?还是我需要为 jQuery 使用特殊的上传插件?
jquery 表单是最好的方法,您可以将其添加到任何普通表单中,
<form method="post" action="URL">
<input type="file" name="file">
<input type="text" name"text">
<input type="submit">
</form>
<script type="text/javascript">
$(document).ready(function() {
$(form).ajaxForm();
})
</script>
将按预期工作,但使用 ajax。
您不能通过 javascript 上传文件。
查看这个相关问题:
Is it possible to use Ajax to do file upload?
本质上,“伪造”AJAX 文件上传的两种最流行的方法是使用 Flash 插件(如SWFUpload )或将表单提交到处理请求的隐藏 iframe。
表单包含文件输入,但表单上缺少 method=POST 和 enctype=multipart/form-data。文件不会发送
使用表单数据
<form>
<label for="imageToSend">Cargar imagen a la galeria</label>
<input type="file" name="imageToSend" id="imageToSend" value="Cargar imagen" />
</form>
<script>
$('#imageToSend').on('change',function(event){
var dialog = $('#dialog');
var Data = new FormData();
Data.append('imageToSend',$('#imageToSend')[0].files);
$(this).val('');//Clear input file
$.ajax({
url: "/upload",
data: Data,
processData: false,
contentType: false,
type:'POST',
success: function(data){
if(data.success){
//success handler
}else if(!data.success){
//error backend handler
}
},
error: function(data){
//error handler Ej:404 status
}
})
});
</script>
如果您可以控制环境,例如,您正在为您推荐浏览器的 Intranet 编写管理应用程序,那么使用 Firefox 3 及更高版本就可以上传真正的 AJAX 文件。在所有其他情况下,iframe 解决方法或基于 Flash 的上传器是可行的方法。
这是可能的,但在谷歌浏览器中不起作用)看!
...
<form method='post' enctype='multipart/form-data'>
<input type="file" id="imf" name="imf"/>
<input type="button" id="Save"/>
</form>
...
$("#Save").live("click", function(){
var photo = document.getElementById("imf");
var file = photo.files[0];
$.post('/user/saveNewPhoto', {'imf':file.getAsDataURL(), fname:file.fileName }, function( data ){
alert ( data );
});
});
上传端脚本需要解码base64),仅此而已,但我没有在大文件上测试这个脚本