【问题标题】:prevent php $_REQUEST converting json防止 php $_REQUEST 转换 json
【发布时间】:2012-12-22 18:56:40
【问题描述】:

有没有人知道一种方法可以防止 PHP $_REQUEST 自动转换 JSON?我正在通过 POST 发送数据,并希望将其中的一些数据保留为原始形式并将其存储为字符串。

理想情况下,我想要一些简单的方法来“转义”一段字符串。似乎有一种简单的方法可以做到这一点,但我还没有见过。


哇...请原谅我在表达这个问题时不够精确,我已经连续几天不停地编程,只是累了。没想到我还没来得及解释误解就急于结束我的问题。

我的意思是我将 javascript 对象作为数据传递给 jQuery 的 $.ajax() 方法,并使用 type:"POST" 进行调用。后来我意识到 $.param() 在内部用于将对象序列化为传输的查询字符串,并且 $_REQUEST[] 将通过这种方式传递的对象转换为数组结构,就像处理任何复杂的表单数据一样。


客户端代码

$.ajax({ type: "POST", url: "some.php", data: {"obj":{"key":"val"},"str":"text"} })

【问题讨论】:

  • PHP 不会自动转换 JSON。
  • 它不会自动转换 JSON。是什么让您认为它确实有效?
  • 我们是在谈论magic_quotes吗?
  • 这个问题和JSON数据格式有关系吗?看起来不像……?!
  • @jtrick:这不是 JSON,也与 JSON 没有任何关系。那是一个 JavaScript 对象。 JSON 是恰好共享 JavaScript 语法的数据的字符串表示。在您的$.ajax 中,对象被转换为查询字符串,然后POST 被转换为PHP。 PHP 获取该查询字符串并将其转换为 $_POST 数组。这就是$_POST(和$_REQUEST)的工作原理。

标签: php jquery ajax json request


【解决方案1】:

当您执行 jQuery AJAX 请求时,数据中的键/值对作为 POST 参数而不是 JSON 发送。如果您希望将数据作为 JSON 发布,那么您需要做的事情类似于以下内容:

<script type="text/javascript" src="https://raw.github.com/gist/754454/c6401b8cc461f84799503484a0c780a7622b164d/jQuery.stringify.js"><!-- JSON library --></script>

<script type="text/javascript">
  var data = JSON.stringify({"obj":{"key":"val"},"str":"text"}});
  $.ajax({'type':"POST", 'url':"some.php", 'data':{'data':data});
</script>

请注意,我们将您通常传递的内容作为“数据”参数传递,但相反,我们创建了一个名为“数据”的后参数,其值作为数据结构的字符串化版本。也称为 JSON。

【讨论】:

  • 感谢您的回答,我实际上是在发布问题后发现了这一点,但问题在我纠正之前就已关闭。
【解决方案2】:

在这种特定情况下,我希望能够执行以下操作:

$.ajax({
    type: "POST", 
    url: "some.php", 
    data: {
        "obj": {
            "key": "val",
            "keepStr": JSON.stringify({
                "innerObj" {
                    "item1": "val",
                    "item2": "val2"
                }
            })
        },
        "str": "text"
    } 
});

并将“innerObj”作为 JSON 字符串直接存储到数据库中。如前所述,我的(错误的)印象是 $.ajax() 将数据转换为 JSON 以进行传输。正如另一个答案所阐明的那样,情况并非如此,而是在内部使用 $.param() 进行转换。

感谢您的回复,并重新提出问题。

【讨论】:

  • 对于它的价值,即使使用其他方法将结构转换为 JSON,然后再返回,像上面示例中那样对嵌套对象进行字符串化仍然可以获得相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 2011-09-23
  • 2022-09-24
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
相关资源
最近更新 更多