将JSON数据从Javascript发送到PHP?
如何将JSON数据从浏览器中的Javascript发送到服务器,并由PHP在其中进行解析?
回答:
我在这里获得了很多信息,所以我想发布我发现的解决方案。
从浏览器上的Javascript获取JSON数据到服务器,然后让PHP成功解析它。
Windows上的浏览器(Firefox)中的Javascript。LAMP服务器作为远程服务器:Ubuntu上的PHP 5.3.2。
1)JSON只是文本。以某种格式的文本,但只是一个文本字符串。
2)在Javascript中,var str_json = JSON.stringify(myObject)
给我JSON字符串。
3)我使用Javascript中的AJAX XMLHttpRequest对象将数据发送到服务器:
request= new XMLHttpRequest()request.open("POST", "JSON_Handler.php", true)
request.setRequestHeader("Content-type", "application/json")
request.send(str_json)
[... code to display response ...]
4)在服务器上,PHP代码读取JSON字符串:
$str_json = file_get_contents('php://input');
这将读取原始POST数据。$str_json
现在包含来自浏览器的确切JSON字符串。
1)如果我想使用"application/x-www-form-
urlencoded"请求标头,则需要创建一个标准的POST字符串,"x=y&a=b[etc]"
以便在PHP得到它时,可以将其放入$_POST
关联数组中。因此,在浏览器中的Javascript中:
var str_json = "json_string=" + (JSON.stringify(myObject))
当我像上述版本1中一样通过AJAX / XMLHttpRequest发送str_json时,PHP现在将能够填充$ _POST数组。
显示的内容$_POST['json_string']
将显示JSON字符串。将$
_POST数组元素上的json_decode()与json字符串一起使用将正确解码该数据并将其放入数组/对象中。
最初,我尝试发送带有application / x-www-form-urlencoded标头的JSON字符串,然后尝试立即从PHP的$
_POST数组中读取它。$ _POST数组始终为空。那是因为它期望格式为yval =
xval&[rinse_and_repeat]的数据。它没有找到这样的数据,只有JSON字符串,并且只是将其丢弃了。我检查了请求标头,然后正确发送了POST数据。
同样,如果我使用application / json标头,则无法再次通过$ _POST数组访问发送的数据。如果要使用application /
json内容类型标头,则必须通过php:// input而不是$ _POST访问PHP中的原始POST数据。
以上是 将JSON数据从Javascript发送到PHP? 的全部内容, 来源链接: utcz.com/qa/402093.html