Javascript 在PHP错误中发送带有其他字符串的输入文件
我想通过ajax发送输入文件和一些字符串,但我不能发送文件,因为它不需要处理(所以我应该使用processData:false),但如果我使用它,则每个字符串我都会将结果作为未索引传递 JS脚本: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
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
放在beforesuccess:
中,我有一个错误未定义索引
您发送的数据不正确。您需要将所有信息(输入值和文件)添加到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}
$\u文件
来检索它。我强烈建议你读一下这个问题:非常感谢,我检查了一下,问题解决了,你是最好的。只有一件事。。。当我上传.txt或.png文件时,我可以看到通过电子邮件收到的文件,但如果我上传.pdf文件,它不会发送电子邮件$mail->AddAttachment($_FILES['currency']['tmp_name'],$_FILES['currency']['name']);很高兴你让它工作了。这是非常奇怪的行为。文件类型不应该有任何区别。我建议开始一个新的问题