我正在使用JQuery发布表单数据,我已将其添加到我的函数中以允许它发布/上传文件:
mimeType:"multipart/form-data",
Run Code Online (Sandbox Code Playgroud)
我在这里用我的HTML表单调用它:
<form id="form1" method="post" action="/tickets/record?type=<?php echo $_GET["type"]; ?>&seq=<?php echo $_GET["seq"]; ?>" enctype="multipart/form-data" onsubmit="post_form('#form1');">
Run Code Online (Sandbox Code Playgroud)
并尝试使用以下方法处理PHP中的附件:
$attachment_array = array();
foreach($_FILES['ticket_update_files']['name'] as $key => $value) {
if(!$_FILES['ticket_update_files']['error'][$key]) {
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有认识到任何已被选中的文件.
我的完整jquery函数是:
function post_form(form_id, type, redir_url, loading_modal) {
type = type || '';
redir_url = redir_url || '';
loading_modal = loading_modal || '';
$( form_id ).submit(function(e) {
var formObj = $(this);
var formURL = formObj.attr("action");
var formData = new FormData(this);
CheckRequired(e);
if(loading_modal === '1') { } else {
LoadModalBody('<h2 align="center">Loading...</h3><p align="center"><i class="fa fa-refresh fa-spin fa-5x"></i></p>', 'Loading');
}
$.ajax({
url : '/section' + formURL,
type: "POST",
data : formData,
mimeType:"multipart/form-data",
contentType: false,
cache: false,
processData:false,
success:function(data, textStatus, jqXHR) {
//alert(type);
if(type === 'modal') {
if(redir_url === '') {
LoadModal('/section' + formURL, '');
} else {
LoadModal('/section' + redir_url, '');
}
} else if(type === 'reload') {
if(redir_url === '') {
location.reload();
} else {
OpenPage(redir_url);
}
} else {
//close the loading modal
if(loading_modal === '1') { } else {
CloseModal();
}
//location.reload();
//$("body").html(data);
}
},
error: function(jqXHR, textStatus, errorThrown) {
//if fails
}
});
return false;
e.preventDefault();
});
}
Run Code Online (Sandbox Code Playgroud)
用于Jquery multipart/form-data提交.
$(document).ready(function (e) {
$("#formid").on('submit', (function (e) {
e.preventDefault();
$("#message").empty();
$('#loading').show();
$.ajax({
url: "ajax_php_villa_file.php", // Url to which the request is send
type: "POST", // Type of request to be send, called as method
data: new FormData(this), // Data sent to server, a set of key/value pairs (i.e. form fields and values)
contentType: false, // The content type used when sending data to the server.
cache: false, // To unable request pages to be cached
processData: false,
beforeSend: function () {
$('.loader-img').show();
}, // To send DOMDocument or non processed data file it is set to false
success: function (data) // A function to be called if request succeeds
{
$('.loader-img').hide();
if (data.trim() != "")
$("#imresss").html(data);
}
});
}));
});
Run Code Online (Sandbox Code Playgroud)
尝试手动将每个文件添加到 FormData 对象。方法如下。
HTML:
<form id="my_form" method="post" action="" enctype="multipart/form-data">
<input type="file" id="my_files" multiple>
<input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
js:
$( "#my_form" ).submit(function(e) {
e.preventDefault();
var data = new FormData();
$.each( $('#my_files')[0].files, function(i, file) {
data.append('file[]', file);
});
$.ajax({
url: 'http://162.243.221.224/multipart/upload.php', // I will keep this script alive for few weeks
data: data,
cache: false,
contentType: false,
processData: false,
// mimeType:"multipart/form-data",
type: 'POST',
dataType: "text",
success: function(data){
alert(data);
},
error: function(data){
alert(data);
}
});
return false;
});
Run Code Online (Sandbox Code Playgroud)
PHP:
<?php
print_r( $_FILES['file']['name'] );
Run Code Online (Sandbox Code Playgroud)
已在 Firefox 47.0 中使用最新的 jquery 对其进行了测试。为我工作(没有在ajax中指定mimeType,在表单标签中指定action属性)。