在表单中,我使用php用值填充一些元素。我在表单里面也有一些输入,比如输入文件和textarea。在收集了JS中的所有值之后,我尝试在php文件中使用AJAX传递它们。
我可以在php文件中处理所有非文件元素,但我无法弄清楚如何将输入文件发送到php脚本并将文件附加到电子邮件中。
我没有运气就尝试了FormData方法。您可以在下面找到我现在开发的部分代码。
有关使用ajax成功发送输入文件的任何建议以及如何在php中处理它?</ p>
<form role="form">
<div class="col-md-7">
<div class="user-name">
<span>@</span>
<h2 id="usr"><?php echo "".$arr['user']['username']; ?></h2>
</div>
</div>
<div id="photoup1" class="">
<div class="form-group">
<label for="photo1" class="upimg"><i class="fa fa-upload" aria-hidden="true"></i> Choose a Photo</label>
<input type="file" name="photo1" id="photo1">
</div>
</div>
</form>
jQuery(function() {
jQuery("#submit").click(function() {
var error = false;
var vardata = new Array();
var obj = {};
var username = jQuery.trim(jQuery("#usr").text());
var photo1 = jQuery("#photo1")[0].files[0];
console.log(photo1);
obj['username'] = username;
obj['photo1'] = photo1;
vardata.push(obj);
console.log(vardata);
if (error==false){
jQuery("#submit").attr({"disabled" : "true", "value" : "Loading..." });
jQuery.ajax({
type: "POST",
url: "/mailsender.php?dataafter",
data: {'vardata' : JSON.stringify(vardata)},
cache: false, // To unable request pages to be cached
success: function(){
jQuery("#submit").remove();
console.info("Well done!");
},
error: function(){
console.error("There was an error sending the AJAX call...");
}
});
//end of ajax
}
return false;
});
});
<?php
require 'PHPMailerAutoload.php';
if($_POST){
$mail = new PHPMailer;
$mail->isSendmail();
$mail->setFrom('FROM EMAIL', 'First Last');
$mail->addAddress('MY EMAIL', 'Nick Ivit');
$mail->Subject = 'PHPMailer file sender 6test';
$mail->isHTML(true);
$request = $_POST['vardata'];
$r = json_decode($request, true);
foreach ($r as $key => $value) {
$username = $value['username'];
}
$mail->Body = ''.$username.'';
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
}else {
echo "Message sent!";
}
?>