var name = jQuery('[data-field="name"]').val();
var email = jQuery('[data-field="email"]').val();
var inumber = jQuery('[data-field="inumber"]').val();
var rnumber = jQuery('[data-field="rnumber"]').val();
var date = jQuery('[data-field="date"]').val();
var amount = jQuery('[data-field="amount"]').val();
var feedback = jQuery('[data-field="name"]').val();
var file_attach = new FormData(jQuery('input[name^="media"]'));
jQuery.each(jQuery('input[name^="media"]')[0].files, function(i, file) {
file_attach.append(i, file);
});
jQuery.ajax({
type: 'POST',
data: { func: "sendMail", name,email,inumber,rnumber,date,amount,feedback,file_attach},
url: 'billing-information-mailer.php',
cache: false,
contentType: false,
processData: false,
success: function(data){
console.log(data);
}
});
我正试图将表单信息和附件传递到php文件以发送电子邮件,最初我只是使用$.post
,但我需要将processData设置为false,因此我转移到$.ajax
,目前我的php文件正在发送空返回。唯一的代码在我的php文件是print_r($_POST);
<input type="file" name="media" data-field="billing" id="vdnupload" name="vdnupload" placeholder="Proof of Payment">
提供给data
属性的对象的语法不正确,因为每个项都需要一个键。
然而,一个更紧迫的问题是,要上传一个文件,你需要把所有的数据(文件和输入值)在FormData
对象,并单独发送。试试这个:
var formData = new FormData();
$.each($('input[name^="media"]')[0].files, function(i, file) {
formData.append(i, file);
});
formData.append('name', $('[data-field="name"]').val());
formData.append('email', $('[data-field="email"]').val());
formData.append('inumber', $('[data-field="rnumber"]').val());
formData.append('rnumber', $('[data-field="rnumber"]').val());
formData.append('date', $('[data-field="date"]').val());
formData.append('amount', $('[data-field="amount"]').val());
formData.append('feedback', $('[data-field="name"]').val());
$.ajax({
type: 'POST',
data: formData,
url: 'billing-information-mailer.php',
cache: false,
contentType: false,
processData: false,
success: function(data){
console.log(data);
}
});
如果您在请求中包含的所有输入周围放置form
元素,则可以使此操作简单得多。这样,您只需向FormData
构造函数提供该形式的引用,就可以为您填充所有值:
var formData = new FormData($('#myForm')[0]);