【问题标题】:How to pass a javascript object to a PHP file while using ajax如何在使用 ajax 时将 javascript 对象传递给 PHP 文件
【发布时间】:2012-10-17 01:28:25
【问题描述】:

我有一个 javascript 对象,我想在使用 jQuery 的 ajax 实现时将其传递给 PHP 文件。

我试图直接将它传递给它,但这不起作用,因为它没有被转义或任何东西。我尝试使用 JSON.stringify 但这对我也不起作用。

有没有办法将 javascript 对象“序列化”为 POST 字符串?

更新,我再次使用 JSON.stringify()。结果是:

JSON.stringify() 的结果是:

{\"label\":\"Borne, Overijssel, Nederland\",\"value\":\"Borne, Overijssel, Nederland\",\"geocode\":{\"address_components\":[{\"long_name\":\"Borne\",\"short_name\":\"Borne\",\"types\":[\"locality\",\"political\"]},{\"long_name\":\"Borne\",\"short_name\":\"Borne\",\"types\":[\"administrative_area_level_2\",\"political\"]},{\"long_name\":\"Overijssel\",\"short_name\":\"OV\",\"types\":[\"administrative_area_level_1\",\"political\"]},{\"long_name\":\"Nederland\",\"short_name\":\"NL\",\"types\":[\"country\",\"political\"]}],\"formatted_address\":\"Borne, Nederland\",\"geometry\":{\"bounds\":{\"ca\":{\"b\":52.2832527,\"f\":52.3151634},\"ea\":{\"b\":6.688658900000064,\"f\":6.801415300000031}},\"location\":{\"Ya\":52.3002366,\"Za\":6.753725799999984},\"location_type\":\"APPROXIMATE\",\"viewport\":{\"ca\":{\"b\":52.2832527,\"f\":52.3151634},\"ea\":{\"b\":6.688658900000064,\"f\":6.801415300000031}}},\"types\":[\"locality\",\"political\"]}}

当我执行json_decode 时,结果为 NULL。有什么建议吗?

【问题讨论】:

  • 你能举个例子说明你在做什么吗?你的代码在这里,也许是一个 jsfiddle.net 的例子?

标签: javascript object serialization


【解决方案1】:

如果您将对象作为合法 JSON 格式的字符串传递给 PHP,请尝试使用

json_decode() 在 php 方面。示例

<?php
   $ojb = json_decode($_POST['my_json_string']);
?>

这将根据您使用的 PHP 版本将您的对象转换为数组或对象,并且在某些情况下,该对象将转换为包含多个对象的数组。示例:

Array(
    [0] stdClass (
            'key1'=>'val1'
            'key2'=>'val2'
            'key3'=>'val3'
         )
)

我知道上面不是一个很好的表示,但它是那里的行中的表示。

在 PHP 端之后,您可以像使用任何其他数组/对象一样使用变量 $ojb

$something = $ojb[0]->key1;

编辑 我现在注意到你的字符串了。引号在字符串中被转义的事实打破了它是一个 JSON 对象的事实,你可以做两件事之一。要么通过你的 post/get 按原样将对象传递给 PHP,而不用运行它stigify 或.. 如果需要,您可以在 PHP 端尝试..

$ojb = stripslashes($_POST['my_json_string']); $ojb = json_decode($ojb);

它将尝试从引号中删除斜杠,然后再将其通过解码过程。

http://php.net/manual/en/function.json-decode.php

【讨论】:

  • 其实我认为我读错了你的问题。这可能不是你寻求的解决方案。
  • 嗨,Crhiss,好吧,我正在路上。我现在正在做的工作。但我无法正确 json_decode 后值。
  • json_decode-call 的返回值为 NULL。我相信我的字符串不正确。
  • 这似乎是合理的,我必须再次阅读它,不记得如果无效,json decode 会返回什么。但 null 是可能的
  • 我已经在问题中添加了输出。
【解决方案2】:

您可以指定 POST 请求的原始正文。原始数据将是 JSON.stringify 调用的结果,这意味着您应该指定适当的 Content-Type 标头。

$.ajax(url, {
  type: 'POST',
  contentType: 'application/json',
  data: JSON.stringify(data),
  processData: false // prevent escaping and other processing
});

然后您可以像这样在 PHP 中反序列化对象:

$json = file_get_contents('php://input');
$data = json_decode($json);

原始请求正文映射到特殊路径php://input

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2014-05-12
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    相关资源
    最近更新 更多