我有一个发送电子邮件的代码。
HTML页面
<form id="emailForm" method="post" enctype="multipart/form-data" onSubmit="return sendmailForm(this)">
<input type="text" id="from" />
<input type="text" id="to" />
<input type="text" id="subject" />
<textarea id="input"></textarea>
<input type="file" id="file" />
<input type="submit" id="submit" value="submit" />
</form>
Javascript将值发送到PHP文件
function sendmailForm(){
$('#loading').css('display','block');
var to = document.getElementById('to').value;
var from = document.getElementById('from').value;
var subject = document.getElementById('subject').value;
var input = document.getElementById('input').value;
var file = document.getElementById('file').value;
var str = 'to='+to+'&from='+from+'&subject='+subject+'&input='+input+'&file='+file;
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else
{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
$('#success').css('display','inline');
$('#loading').css('display','none');
}
}
xmlhttp.open("GET","generate_email_check.php?"+str,true);
xmlhttp.send();
return false;
}
和PHP文件获取此值并发送电子邮件
$to= mysql_prep($_GET['to']);
$from = mysql_prep($_GET['from']);
$subject = mysql_prep($_GET['subject']);
$input = mysql_prep($_GET['input']);
$headers = "MIME-Version: 1.0\r\n";
$headers.= "Content-Type: text/html; charset=iso-8859-1\r\n";
$headers.= "From: ".$from."\r\n";
$headers.= "Reply-To: ".$from."\r\n";
$headers.= "Return-Path: ".$from."\r\n";
$headers.= "X-Sender: ".$from."\r\n";
if($_FILES["file"]["name"] != "")
{
$strFilesName = $_FILES["file"]["name"];
$strContent = chunk_split(base64_encode(file_get_contents($_FILES["file"]["tmp_name"])));
$headers .= "--".$strSid."\n";
$headers .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n";
$headers .= "Content-Transfer-Encoding: base64\n";
$headers .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";
$headers .= $strContent."\n\n";
}
mail($to, $subject, $input, $headers);
我的问题是javascript未传递$_FILES
的值,如何更改javascript代码以传递附件?
没有$_FILES
任何帮助将不胜感激。
答案 0 :(得分:0)
您的xmlhttp似乎将文件名作为URL参数传递,我怀疑这是您的意图。如果您希望后端脚本使用它,您实际上需要发送文件数据。
以下是:Upload file data via ajax request
function upload(formElement) {
var xhr = new XMLHttpRequest();
xhr.open(formElement.method, formElement.action);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// Handle response.
alert(xhr.responseText); // handle response.
}
};
xhr.send(new FormData(formElement));
return false;
}
请注意正在创建的FormData对象,其中包含您的文件数据。大多数现代浏览器都支持它(自然IE远远落后,这只是自IE10以来的支持)。
总体而言,您可能会从plupload这样的库中获得更好的结果。该库通过回退方法和Flash或Silverlight等插件处理旧版浏览器。它还包含进度条,反馈和事件的代码以及客户端的大型图像文件的下采样。</ p>