【问题标题】:json stringify and json decode issuejson stringify 和 json 解码问题
【发布时间】:2015-07-29 22:21:03
【问题描述】:

html

<input type="hidden" name="test[]" id="test" value= "" />

js

jQuery(document).on('click', '#target', function () {
    var jsArr = ["val1", "val2", "val3"];
    jQuery('input[name^="test[]"]').val(JSON.stringify(jsArr));

});

php

$json = $_POST['test'];
var_dump($json); 
//array(1) { [0]=> string(43) "[\"val1\",\"val2\",\"val3\"]" } 
var_dump($json[0]);
//string(43) "[\"val1\",\"val2\",\"val3\"]"
var_dump(json_decode($json[0]));
//return NULL

我的 json 字符串是有效的 json 格式,所以我不知道为什么它不起作用。任何的想法?

【问题讨论】:

  • echo json_last_error_msg(); 让我们看看 PHP 不喜欢什么。
  • var_dump(json_decode($json[0] , true));
  • 或尝试:$json[0] = str_replace('\"' , '"' , $json[0]);可能是因为“逃逸”而发生这种情况

标签: javascript php json


【解决方案1】:

您正在尝试在数组上使用 stringify。你不能。

它用于对象。因此,您应该这样做:

jQuery(document).on('click', '#target', function () {
    var jsObj = {
        val1: "val1", 
        val2: "val2", 
        val3: "val3"
    };

    jQuery('input[name^="test[]"]').val(JSON.stringify(jsObj));

});

【讨论】:

  • 如果要向 PHP 发送一个数组,那么以这种方式使用 JSON 是没有意义的。使用对象的要点是具有名称关联的属性,而数组在 JS 中是匿名的。无需任何形式的编码即可将数组发送到 PHP。它只是按原样工作。
  • 您可以在数组上使用JSON.stringify。数组可以是对象数组。
  • @SteveChamaillard 如果我只使用:jQuery('input[name^="test[]"]').val(jsArr); var_dump 给我:array(1) { [0]=> string(14) "val1,val2,val3" }。我不能使用 val1,val2,val3,因为它是一个字符串。
  • 如果这是一个简单的 AJAX POST 请求,您尝试将数组发送到 PHP,那么您应该简单地使用 AJAX 代码,并且不需要任何隐藏输入。如果你真的需要隐藏输入,它不应该由 JS 填充,而是由客户端填充。使用 'name="test[]"' 的唯一目的是当您有多个 'name="test[]"' 时。然后它们将填充一个数组并作为数组发送给 PHP。如果你不能这样做,并且仍然需要按照你的方式去做,你可以简单地使用php.net/manual/en/function.explode.php
  • 我需要隐藏输入。我有多个 test[] 值。我将此代码用于 wordpress 插件,隐藏的输入位于元框中。 js 更改了隐藏输入的值,在我获取该值并将其与帖子一起保存之后。我之前使用过explode,但我发现使用数组更干净。我认为您可以严格地创建一个数组...查看已接受的解决方案stackoverflow.com/questions/10939840/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2014-07-22
相关资源
最近更新 更多