从 jQuery Ajax 发布时 PHP Json 格式错误

Posted

技术标签:

【中文标题】从 jQuery Ajax 发布时 PHP Json 格式错误【英文标题】:PHP Json Malformed When Posted From jQuery Ajax 【发布时间】:2021-09-23 09:20:37 【问题描述】:

我遇到了一个奇怪的问题,当我对来自 jquery ajax 调用的某些 json 使用 json_decode() 时,它总是说 json 格式错误 (JSON_ERROR_SYNTAX)。

我说这很奇怪,因为如果我从开发人员控制台获取原始发布的 json 的副本并通过 json_decode() 手动推送它,那么它可以完美解码。

我在这里上传了一个示例 json 的 txt 文件:https://drive.google.com/file/d/1IZ5RkpFK7KLUNYeZe4dPdxGWZXinmFSJ/view?usp=sharing,它可以手动解析它,但不能从发布的数据中解析。另一个奇怪的问题是,如果我将 json 字符串保存到 mysql 数据库中的 longtext 字段中,然后再次将其拉出,它就会很好地解码;但这并不理想,它需要在进入数据库之前对其进行验证,我不确定为什么这会允许它解码。

有什么想法吗?

【问题讨论】:

请阅读How to Ask和minimal reproducible example,然后相应地编辑您的问题。 您的文件中有 BOM 吗? 【参考方案1】:

这可能是由于您的代码中添加了新的行代码。您可以添加以下代码并尝试再次解码代码,它可能会起作用。

$content = preg_replace('/[\r\n\t\s]+/s', ' ', $content);#new lines, multiple spaces/tabs/newlines
$content = preg_replace('#/\*.*?\*/#', '', $content);#comments
$content = preg_replace('/^\s+/', '', $content);#spaces on the begining

【讨论】:

感谢您的回复,我已经尝试过了,担心它不能解决问题。它仍然对数据返回 null ;数据是有效的,就像我从控制台手动复制它一样工作正常。 您上传的附件是实际的 json,您正在尝试使用 json_decode() 使用 php 进行解码,正确...? 原来发布的json实际上是添加斜杠,当我使用stripslashes时它起作用了! 效果很好。但是,我在本地系统上使用了相同的 JSON 而没有去除斜杠,它仍然可以工作。无论如何.. 问题解决了,这才是最重要的。

以上是关于从 jQuery Ajax 发布时 PHP Json 格式错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery 和 ASP.NET MVC 从 AJAX 调用返回错误消息?

CORS jQuery AJAX 请求

使用 Ajax 和 JQuery 从 PHP 文件中获取数据

使用 ajax、jquery 和 PHP 从数据库更新图像不起作用

使用 php 和 jquery ajax 从 mysql 数据库中获取数据

从服务器目录填充选择 PHP jQuery AJAX