如何在ajax中使用PHP中的数据

时间:2017-12-13 17:39:32

标签: php ajax forms

我的javascript代码:

function _(selector){ 
    return document.querySelector(selector); 
}

function submitForm(){
    var data = {
        name: _("#name").value,
        email: _("#email").value,
        message: _("#message").value
    }
    var output = JSON.stringify(data)
    var ajax = new XMLHttpRequest();
        ajax.open( "POST", "/PATH" );
        ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
        ajax.onreadystatechange = function() {
            if(ajax.readyState == 4 && ajax.status == 200) {
                console.log('success')
            } else {
                console.log('fail')
            }

        }
        console.log(output)
        ajax.send(output);

}

当我尝试使用静态数据时,它可以工作:

<?php
    $name = "mateusz";
    $to = "kaawkamateusz@gmail.com";
    $subject = "kucharz";
    $message = "message";
    mail($to, $subject, $message);
?>

但是,例如:

$name = $_POST["name"];

不起作用。

我尝试使用JSON但是再次尝试如何从PHP中获取AJAX表单的值。

我以前从不使用PHP,需要帮助:)

修改

print_r show:

Array
(
    [{"name":"asd","email":"asd@gmail_com","message":"12"}] => 
)

1 个答案:

答案 0 :(得分:0)

ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded")

您说您正在发送URL编码的表单数据......

var output = JSON.stringify(data)

...但您的数据是JSON编码的。

要对网址表单进行编码use URLSearchParams

&#13;
&#13;
var data = {
  name: "Example Name",
  email: "example@example.com",
  message: "This is a message"
}


var output = new URLSearchParams(data);
console.log(output.toString());
&#13;
&#13;
&#13;

注意limited browser support。考虑使用polyfill

或者,为JSON和rewrite the PHP since JSON is not supported for $_POST设置正确的内容类型。