简体   繁体   English

Ajax表单$ _POST空白返回数据

[英]Ajax form $_POST blank return data

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);
    }
});

I'm trying to pass form info and attachment to a php file to send an email, initially I just went with $.post however I need to set processData to false so I shifted to $.ajax , currently my PHP file is sending an empty return. 我正在尝试将表单信息和附件传递给php文件以发送电子邮件,最初我只是使用$.post然而我需要将processData设置为false所以我转移到$.ajax ,目前我的PHP文件正在发送空回归。 the only code in my php file is print_r($_POST); 我的php文件中唯一的代码是print_r($_POST);

EDIT: 编辑:

<input type="file" name="media" data-field="billing" id="vdnupload" name="vdnupload" placeholder="Proof of Payment">

The syntax of the object you're providing to the data property is incorrect as each item needs a key. 您为data属性提供的对象的语法不正确,因为每个项都需要一个键。

However a more pressing problem is that to upload a file you need to put all the data (file and input values) in to the FormData object and send that alone. 然而,更紧迫的问题是,要上传文件,您需要将所有数据(文件和输入值)放入FormData对象并单独发送。 Try this: 尝试这个:

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);
    }
});

You could make this much, much simpler if you place a form element around all the inputs you want to include in the request. 如果在要包含在请求中的所有输入周围放置一个form元素,则可以做得更多,更简单。 That way you can just provide a reference of that form to the FormData constructor and all values will be populated for you: 这样您就可以向FormData构造函数提供该表单的引用,并且将为您填充所有值:

var formData = new FormData($('#myForm')[0]);   

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM