如何使用Javascript将GET和FILE传递给PHP文件

时间:2013-11-21 01:26:56

标签: javascript php

我有一个发送电子邮件的代码。

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

,php文件工作正常

任何帮助将不胜感激。

1 个答案:

答案 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>