提问人:kamikaze_pilot 提问时间:12/28/2010 最后编辑:Aryaveerkamikaze_pilot 更新时间:7/9/2020 访问量:267914
如何使用 jQuery 序列化进行文件上传
how to do file upload using jquery serialization
问:
所以我有一个表单,我使用 jquery 序列化函数通过 ajax 提交表单
serialized = $(Forms).serialize();
$.ajax({
type : "POST",
cache : false,
url : "blah",
data : serialized,
success: function(data) {
}
但是,如果表单有一个字段怎么办?如何使用此ajax序列化方法将文件传递到表单中...打印 $_FILES 不会输出任何内容<input type="file">
答:
无法使用 AJAX 上载文件,因为无法访问存储在客户端计算机上的文件的内容并使用 javascript 在请求中发送该文件。实现此目的的技术之一是使用隐藏的 iframe。有一个不错的jquery表单插件,它允许您对表单进行AJAX化,并且它还支持文件上传。因此,使用此插件,您的代码将如下所示:
$(function() {
$('#ifoftheform').ajaxForm(function(result) {
alert('the form was successfully processed');
});
});
该插件会自动负责订阅表单的事件、取消默认提交、序列化值、使用正确的方法并处理文件上传字段......submit
评论
可以使用 FormData 方法通过 AJAX 上载文件。尽管 IE7、8 和 9 不支持 FormData 功能。
$.ajax({
url: "ajax.php",
type: "POST",
data: new FormData('form'),
contentType: false,
cache: false,
processData:false,
success: function(data) {
$("#response").html(data);
}
});
评论
使用对象。它适用于任何类型的形式FormData
$(document).on("submit", "form", function(event)
{
event.preventDefault();
$.ajax({
url: $(this).attr("action"),
type: $(this).attr("method"),
dataType: "JSON",
data: new FormData(this),
processData: false,
contentType: false,
success: function (data, status)
{
},
error: function (xhr, desc, err)
{
}
});
});
评论
processData: false, contentType: false,
Illegal invocation
processData: false, contentType: false
HTML5 引入了可用于使用 ajax 上传文件的类。FormData
FormData 支持从以下桌面浏览器版本开始。IE 10+、Firefox 4.0+、Chrome 7+、Safari 5+、Opera 12+
var form = $('#job-request-form')[0];
var formData = new FormData(form);
event.preventDefault();
$.ajax({
url: "/send_resume/", // the endpoint
type: "POST", // http method
processData: false,
contentType: false,
data: formData,
它对我有用!只需将 processData 和 contentType 设置为 False。
[HTML全文]
<form name="my_form" id="my_form" accept-charset="multipart/form-data" onsubmit="return false">
<input id="name" name="name" placeholder="Enter Name" type="text" value="">
<textarea id="detail" name="detail" placeholder="Enter Detail"></textarea>
<select name="gender" id="gender">
<option value="male" selected="selected">Male</option>
<option value="female">Female</option>
</select>
<input type="file" id="my_images" name="my_images" multiple="" accept="image/x-png,image/gif,image/jpeg"/>
</form>
JavaScript的
var data = new FormData();
//Form data
var form_data = $('#my_form').serializeArray();
$.each(form_data, function (key, input) {
data.append(input.name, input.value);
});
//File data
var file_data = $('input[name="my_images"]')[0].files;
for (var i = 0; i < file_data.length; i++) {
data.append("my_images[]", file_data[i]);
}
//Custom data
data.append('key', 'value');
$.ajax({
url: "URL",
method: "post",
processData: false,
contentType: false,
data: data,
success: function (data) {
//success
},
error: function (e) {
//error
}
});
PHP的
<?php
echo '<pre>';
print_r($_POST);
print_r($_FILES);
echo '</pre>';
die();
?>
评论
<button type="button" name="button_name" value="Contact Button">Submit</button>
formData.append("btnName", "true");
data.append('key', 'value');
$(document).on('click', '#submitBtn', function(e){
e.preventDefault();
e.stopImmediatePropagation();
var form = $("#myForm").closest("form");
var formData = new FormData(form[0]);
$.ajax({
type: "POST",
data: formData,
dataType: "json",
url: form.attr('action'),
processData: false,
contentType: false,
success: function(data) {
alert('Sucess! Form data posted with file type of input also!');
}
)};});
通过在ajax调用中使用和设置提交带有文件输入的表单为我工作new FormData()
processData: false, contentType:false
使用上面的代码,我也可以通过Ajax提交带有文件字段的表单数据
评论