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


How to pass GET and FILE using Javascript to a PHP file

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

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>

将值发送到PHP文件的Javascript

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代码以传递附件?

php文件在没有$_FILES 的情况下运行良好

任何帮助都将不胜感激。

您的xmlhttp似乎将文件名作为URL参数传递,我怀疑这是否是您想要的。如果你希望后端脚本使用文件数据,你实际上需要发送它

方法如下:通过ajax请求上传文件数据

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)处理较旧的浏览器。它还有进度条、反馈和事件的代码,以及客户端大型图像文件的下采样。