[英]Accessing and decoding JSON sent from JavaScript to PHP
因此,我有了一个表单,我将其输入的内容放入一个数组中,制成一个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')
,它也发送一个空字符串。
您通过将数据发送为"Content-type","application/json"
来绕过$_POST
。
数据将改为在请求正文中设置,并且可以使用file_get_contents("php://input")
进行检索
有关进一步的讨论,请参见file_get_contents(“ php:// input”)或$ HTTP_RAW_POST_DATA,哪一个更好地获取JSON请求的主体?
通常不需要将您的数据作为json发送到php
如果将JSON放在帖子正文中,则无法从$ _POST获取数据。 看到这个问题, 用PHP接收JSON POST 。 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
并查看请求有效负载和响应将对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.