gpt4 book ai didi

php - 将 JSON 数据从 Javascript 发送到 PHP?

转载 作者:IT老高 更新时间:2023-10-28 12:46:19 27 4
gpt4 key购买 nike

如何在浏览器中将 JSON 数据从 Javascript 发送到服务器并让 PHP 在那里解析它?

最佳答案

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

问题: 从浏览器上的 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" 请求 header ,我需要创建一个标准的 POST 字符串 "x=y&a=b[etc] " 这样当 PHP 得到它时,它可以把它放在 $_POST 关联数组中。因此,在浏览器中的 Javascript 中:

var str_json = "json_string=" + (JSON.stringify(myObject))

当我通过 AJAX/XMLHttpRequest 发送 str_json 时,PHP 现在能够填充 $_POST 数组,如上述版本 1。

显示$_POST['json_string']的内容将显示JSON字符串。在带有 json 字符串的 $_POST 数组元素上使用 json_decode() 将正确解码该数据并将其放入数组/对象中。

我遇到的陷阱:
最初,我尝试发送带有 application/x-www-form-urlencoded header 的 JSON 字符串,然后尝试立即从 PHP 中的 $_POST 数组中读取它。 $_POST 数组始终为空。这是因为它需要 yval=xval&[rinse_and_repeat] 形式的数据。它没有找到这样的数据,只有 JSON 字符串,它只是把它扔掉了。我检查了请求 header ,并且正确发送了 POST 数据。

同样,如果我使用 application/json header ,我再次无法通过 $_POST 数组访问发送的数据。如果要使用 application/json 内容类型 header ,则必须通过 php://input 访问 PHP 中的原始 POST 数据,而不是 $_POST。

引用资料:
1) 如何在 PHP 中访问 POST 数据:How to access POST data in PHP?
2) 关于 application/json 类型的详细信息,以及一些可以转换为 JSON 字符串并发送到服务器的示例对象:http://www.ietf.org/rfc/rfc4627.txt

关于php - 将 JSON 数据从 Javascript 发送到 PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8599595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com