使用Ajax / XMLhttprequest将数据发送到带有邮件功能的php文件

时间:2017-06-27 11:27:57

标签: javascript php ajax

我一直在关注本教程(https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started),但我没有运气。我正在尝试使用XMLhttpRequest与带有javascript文件的php文件进行通信。这是下面的代码。我仍然不明白如何完全传输数据。

HTML

form id="uDF" method="post" onsubmit="submitValidation()">

的JavaScript

function submitValidation(){
var data = [document.forms ["uDF"] ["uDFName"].value, document.forms ["uDF"] ["uDFNumber"].value,
document.forms ["uDF"] ["uDFEmail"].value, document.forms ["uDF"] ["uDFSubject"].value,
document.forms ["uDF"] ["uDFMessage"].value,]
console.log(data);
var char = ''; // variable used to check whether email has @
var x;
var isEmail = false;
var isNotEmpty = false;

//for loop checks email for @ char
for(x = 0; x<data[2].length;x++)
{
    char = data[2].charAt(x);
    if(char === "@"){
        isEmail = true;
        break;
    }
}

var i;

//for loop check if data is collected
for(i=0;i < 5;i++){
    if(data[i] === ""){
        isNotEmpty = false;
    }else{
        isNotEmpty = true;
    }
}
if(isEmail === true && isNotEmpty === true)
{
    var httpRequest;
    httpRequest = new XMLHttpRequest();
    if(!httpRequest){
        return false;
    }
    httpRequest.onreadystatechange = function(){
        if(httpRequest.readyState === XMLHttpRequest.DONE && httpRequest.status === 200)
        {
            var response = JSON.parse(httpRequest.responseText);
        }
        httpRequest.open('POST', '../userData.mail.php')
        httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        httpRequest.send('uDFName=' + encodeURIComponent(data[0]) + 'uDFNumber=' + encodeURIComponent(data[1]) + 'uDFNumber=' + encodeURIComponent(data[3])
            + 'uDFNumber=' + encodeURIComponent(data[4]))
    }
}else if (!isNotEmpty){
    alert("empty fields");
}else if(!isEmail){
    alert("Please enter valid email!");
}

}

PHP

$uDFName = (isset($_POST['uDFName'])) ? $_POST['uDFName'] : '';
$uDFNumber = (isset($_POST['uDFNumber'])) ? $_POST['uDFNumber'] : '';
$uDFEmail = "my@email";
$uDFSubject = (isset($_POST['uDFSubject'])) ? $_POST['uDFSubject'] : '';
$uDFMessage = $uDFName . "\r\n" . $uDFNumber . "\r\n" . "just testing";


$message = wordwrap($message, 70, "\r\n");
mail($uDFEmail, $uDFSubject, $uDFMessage);

1 个答案:

答案 0 :(得分:0)

您必须在事件处理函数之外打开并发送请求。 onreadystatechange处理程序仅在请求的就绪状态发生变化时执行。

如果您没有打开并发送请求,则不会执行处理程序功能,也不会看到任何结果。

此解决方案应该有效:

var httpRequest = new XMLHttpRequest();

// this function executes whenever the ready state of the request changes
httpRequest.onreadystatechange = function () {
    if (httpRequest.readyState === XMLHttpRequest.DONE && httpRequest.status === 200) {
        var response = JSON.parse(httpRequest.responseText);
    }
}

// open the request ...
httpRequest.open('POST', '../userData.mail.php')
httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

// ... and send it
httpRequest.send('uDFName=' + encodeURIComponent(data[0]) + 'uDFNumber=' + encodeURIComponent(data[1]) + 'uDFNumber=' + encodeURIComponent(data[3])
        + 'uDFNumber=' + encodeURIComponent(data[4]));