Javascript 在PHP错误中发送带有其他字符串的输入文件

Javascript 在PHP错误中发送带有其他字符串的输入文件,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我想通过ajax发送输入文件和一些字符串,但我不能发送文件,因为它不需要处理(所以我应该使用processData:false),但如果我使用它,则每个字符串我都会将结果作为未索引传递 JS脚本: var Name = document.getElementById("Name").value; var Surname = document.getElementById("Surname").value; var Residence = document.getElementBy

我想通过ajax发送输入文件和一些字符串,但我不能发送文件,因为它不需要处理(所以我应该使用processData:false),但如果我使用它,则每个字符串我都会将结果作为未索引传递

JS脚本:

var Name = document.getElementById("Name").value;
    var Surname = document.getElementById("Surname").value;
    var Residence = document.getElementById("Residence").value;
    var Email = document.getElementById("Email").value;
    var Phone = document.getElementById("Phone").value;
    var JCurriculum = document.getElementById("Curriculum").files[0];
    var Curriculum = new FormData();
    Curriculum.append("Curriculum", JCurriculum);
    $.ajax({
        method: 'POST',
        url: "scripts/register.php",
        data: {
            Name: Name,
            Surname: Surname,
            Residence: Residence,
            Email: Email,
            Phone: Phone,
            Curriculum: Curriculum
        },            
        success: function (Curriculum) {
            alert('Success');
        }
    });
PHP脚本:

$Name = $_POST['Name'];
$Email = $_POST['Email'];
$Surname = $_POST['Surname'];
$Residence = $_POST['Residence'];
$Phone = $_POST['Phone'];
$Curriculum = $_POST['Curriculum'];

$Name = filter_var($Name, FILTER_SANITIZE_STRING);
$Surname = filter_var($Surname, FILTER_SANITIZE_STRING);
$Email = filter_var($Email, FILTER_SANITIZE_EMAIL);
$Residence = filter_var($Residence, FILTER_SANITIZE_STRING);;
$Phone = filter_var($Phone, FILTER_SANITIZE_STRING);;

如果我将
processData:false
放在before
success:
中,我有一个错误
未定义索引

您发送的数据不正确。您需要将所有信息(输入值和文件)添加到FormData对象中,然后仅发送,而不是将FormData对象与form urlencoded数据一起序列化

您还需要将
contentType
processData
属性设置为
false
。试试这个:

var formData=new formData();
append('Name',$('#Name').val();
formData.append('姓氏',$('姓氏').val();
formData.append('Residence',$('#Residence').val();
formData.append('Email',$('#Email').val();
formData.append('Phone',$('#Phone').val());
formData.append('课程',$('课程')[0]。文件[0]);
$.ajax({
方法:“POST”,
url:“scripts/register.php”,
数据:formData,
processData:false,
contentType:false,
成功:功能(课程){
警惕(“成功”);
}
});
还请注意,如果要在请求中发送的所有信息都包含在单个
元素中,则可以通过向对象构造函数提供对表单元素的引用来简化FormData的创建:

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

错误不再发生,但在我收到的电子邮件中,我没有看到任何附件。我的PHP:$currency=$\u POST['currency']$mail->Body=“从网站联系:{$Name}
  • Cognome:{$姓氏}
  • Comune di residenza:{$Residence}
  • 电子邮件:{$Email}
  • 电话:{$Phone}
  • 课程:{$currency}
  • ;有更多的代码,但我显示了最重要的,我可以看到所有的字符串,如电子邮件,姓名ecc。。。但是我没有收到课程附件。课程是二进制数据,所以您需要使用
    $\u文件
    来检索它。我强烈建议你读一下这个问题:非常感谢,我检查了一下,问题解决了,你是最好的。只有一件事。。。当我上传.txt或.png文件时,我可以看到通过电子邮件收到的文件,但如果我上传.pdf文件,它不会发送电子邮件$mail->AddAttachment($_FILES['currency']['tmp_name'],$_FILES['currency']['name']);很高兴你让它工作了。这是非常奇怪的行为。文件类型不应该有任何区别。我建议开始一个新的问题