小编典典

将JSON数据从Javascript发送到PHP?

javascript

如何将JSON数据从浏览器中的Javascript发送到服务器,并由PHP在其中进行解析?


阅读 399

收藏
2020-05-01

共1个答案

小编典典

我在这里获得了很多信息,所以我想发布我发现的解决方案。

问题: 从浏览器上的Javascript获取JSON数据到服务器,然后让PHP成功解析它。

环境: Windows上的浏览器(Firefox)中的Javascript。LAMP服务器作为远程服务器:Ubuntu上的PHP 5.3.2。

有效的方法(版本1):
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字符串。

可行的方法(版本2):
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数据。

2020-05-01