我的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"}] =>
)
答案 0 :(得分:0)
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
您说您正在发送URL编码的表单数据......
var output = JSON.stringify(data)
...但您的数据是JSON编码的。
要对网址表单进行编码use URLSearchParams
。
var data = {
name: "Example Name",
email: "example@example.com",
message: "This is a message"
}
var output = new URLSearchParams(data);
console.log(output.toString());
&#13;
注意limited browser support。考虑使用polyfill。
或者,为JSON和rewrite the PHP since JSON is not supported for $_POST
设置正确的内容类型。