所以我有一个表单,我把它的输入内容,把它们放到一个数组中,把它变成一个JSON,然后把它发送到PHP,这样它就可以解码并输入到数据库中。我知道使用<form method="POST" action="phpfile.php">
会更容易,但是我不能将其重定向到另一个页面,特别是因为我的PHP没有嵌入到HTML中,而是处理异地的事情。否则,使用$_POST["name"]
来获得我需要的东西会更简单。尽管如此,该页面尤其应该创建用户,接收服务器响应,用户已经输入数据库,然后被给予警报,其中按钮被重定向到主页面。
因此,无论如何,这是整个过程的相关部分。
JavaScript:
window.onload = function findSubmitButton() {
var button = document.querySelector(".send_info").addEventListener("click", serverInteraction);
}
function serverInteraction() {
var xmlhttp;
var inputArray;
var finalArray = [];
var JSONArray;
if (window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} else {
throw new Error("Your browser is not compatible with XMLHTTP");
return false;
}
inputArray = document.querySelectorAll("input[type=text]");
for(var i = 0; i < inputArray.length; i++){
finalArray[i] = inputArray[i].value;
}
console.log(finalArray);
JSONArray = JSON.stringify({finalArray: finalArray});
console.log(JSONArray);
xmlhttp.open("POST","phpFiles/sendUserInfo.php", true);
xmlhttp.setRequestHeader("Content-type","application/json");
xmlhttp.send(JSONArray);
}
PHP:
<?php
$finalArray = json_decode($_POST['finalArray']);
var_dump($finalArray);
?>
var_dump只返回一个null
并且使用echo什么都没有,除了警告我的数组变量没有通过XDebug初始化。我不太确定我在这里做错了什么,我一直在关注这个,就像教程告诉你做的那样,并且没有生成数组。我也试过$_POST['JSONArray']
而没有任何运气,以防它应该如何去。还尝试了file_get_contents('php://input')
,它也发送了一个空字符串。
答案 0 :(得分:0)
您通过将数据发送为$_POST
来绕过"Content-type","application/json"
。
数据将改为在请求正文中设置,可以使用file_get_contents("php://input")
通常不需要将您的数据作为json发送到php
答案 1 :(得分:0)
如果您将JSON放入帖子正文中,则无法从$ _POST获取数据。
看到这个问题Receive JSON POST with PHP。 php无法正确处理application/json
。
因为你的var_dump是空的,试试这个
var_dump(file_get_contents('php://input'));
var_dump(json_decode(file_get_contents('php://input'), true));
你会看到你的数据。
如果您发送数据而不将其更改为JSON,您将收到错误的数据。
例如:您的finalArray
为['a','b','c']
并且您直接发送。
var_dump(file_get_contents('php://input'));
你会看到php得到字符串a,b,c
而不是['a','b','c']
因此,如果您想使用$ _POST接收数据,则需要使用application/x-www-form-urlencoded
。你可以用jquery来做。见http://api.jquery.com/jquery.ajax/
$.ajax({
method: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
它会将你的js对象序列化为x-www-form-urlencoded
,php会正确处理它。
使用chrome的开发工具,切换到network
并查看请求的有效负载和响应对您有所帮助。