【问题标题】:javascript objects to json string to php array -> POSTjavascript 对象到 json 字符串到 php 数组 -> POST
【发布时间】:2013-03-29 05:31:33
【问题描述】:

大家好,我真的需要帮助。我将这个 json 对象传递给 php..

var x = {};
x.xt = {};
x.xt.id = id;
x.xt.to = foo;

somearray.push(x);

将对象转换为json:

$.toJSON(x);

json 字符串:

[{"x":{"xt":"9","to":"2"}}]

我发这个:

$.post(
    "temp/sop.php",
    { xa: somearray},
    function(data){
        console.log("response - "+ data);
});

服务器端:

$xtj = $_POST["xa"];
$encodedArray = array_map(utf8_encode, $xtj);
$asnk = json_decode($encodedArray);

这会返回:

string(4) "null"

还有这个:

$asnk = json_encode($xtj);

返回:

null

它设置到的数据库:

UTF8

当我测试它是否是一个数组时,返回 true..

知道如何解决这个问题吗?谢谢

也是服务器端:

$xtj = $_POST["xa"];
$asnk = json_decode($xtj);

返回:

NULL

【问题讨论】:

  • 你确定 $_POST["xa"] 是一个数组吗?并且 utf8_encode 应该在引号内,否则 php 会抛出一个通知(或警告)。
  • 尝试:console.log(somearray); 就在 $.post 之前,var_dump($_POST['xa'); 位于 php 文件的开头。
  • 如果我回显 POST 我得到这个:[{\"x\":{\"xt\":\"4\",\"to\":\"2\"} }] 和 $.post 之前的控制台是这样的: [{"x":{"xt":"9","to":"2"}}]
  • 你想做什么? sop.php 只是应该解码 JSON,将其重新编码为 JSON,然后将其发回还是什么?
  • sop.php 它只是解码 JSON 并将数组传递给另一个方法。但它就是这样。它在一台服务器和本地主机上运行良好。但是当我搬到他们的最终服务器时它不起作用..即使它确实具有相同的设置

标签: php javascript ajax json javascript-objects


【解决方案1】:

$.toJSON(x) 不会就地进行转换;它返回 JSON,而您只是将其丢弃。你需要这个:

$.post(
    "temp/sop.php",
    { xa: $.toJSON(somearray) },
    // ...
});

然后,在 PHP 方面,您不会想要 array_map,因为在您解码 JSON 之前它不会是一个数组:

$xtj = $_POST["xa"];
$encodedArray = utf8_encode($xtj);  // I'm not sure you need this, by the way.
$asnk = json_decode($encodedArray);

【讨论】:

  • 我在 javascript 响应后在控制台上得到了这个:response - NULL
  • 这是 POST 在服务器上收到的内容:[{\"cart\":{\"itemid\":\"4\",\"itemAmount\":\"1\ "}}] 但在 json_encode 之后我得到一个 null 结果可能是 magic_quotes?
  • 好得不能再好,运气不好:-/除了magic_quotes之外,服务器设置会不会弄乱这个
  • @jycr753:也许吧。我有一段时间没有处理 PHP 了;我想不出我会怎么做。
【解决方案2】:

尝试使用 if(get_magic_quotes_gpc()) $xtj = stripslashes($xtj); 在尝试解码之前丢失过多的转义。

【讨论】:

  • 感谢伙伴,完全有效。还是不明白。我有魔术引号关闭:S
  • 猜不出来。尝试使用phpinfo() 查看实际使用的是哪个 php.ini(并确认魔术引号实际上已打开)。然后关闭 php.ini 中的魔术引号。
【解决方案3】:

您正在做的是在 JS ($.toJSON()) 中转换为 json 字符串。 然后在 PHP 中,您再次尝试转换为 json 字符串 (json_encode())。 而且您在不是数组而是字符串的东西上使用array_map()。 (尝试echo $_POST["xa"];查看内容。)

【讨论】:

  • 我的坏伙伴。只是一个未命中的咒语 :) 但它是 json_decode :) 感谢您注意到它 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2017-08-27
  • 2021-08-08
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多