【问题标题】:Split doesn't work with json_encode in JavaScript拆分不适用于 JavaScript 中的 json_encode
【发布时间】:2014-04-04 10:19:12
【问题描述】:

我在 php 中有一个这样的数组:

$array_php = (1,2,3,4,5);

在 JavaScript 中我会这样做:

var obj = <?php echo json_encode($array_php); ?>;

如果我这样做 alert(obj); 我可以毫无问题地获得内容:1,2,3,4,5

如果我这样做:

var elem = obj.split(',');

这失败了。例如,如果我做 alert(elem[1]) 我什么也得不到。并且 var elem = ... 行失败。

如果我创建没有 json_enconde 的数组可以正常工作,但我需要访问这个对象。

我能做什么? 谢谢!

【问题讨论】:

  • 您可能需要执行以下操作:var obj = JSON.parse(&lt;?php echo json_encode($array_php); ?&gt;);。
  • 是的。我同意。因此,您可以使用arr = $.pareseJSON(obj) 遍历obj,在for 循环中访问每个对象!
  • @Andy:不。 JSON 是 JavaScript 文字符号的子集,因此如果您将其放入 JavaScript 源代码中,JavaScript 解析器可以直接处理它。 (事实上​​,如果您按照评论中的内容进行操作,您会收到解析错误,因为它会变成JSON.parse([1,2,3,4,5]),它会在数组上触发toString,给我们JSON.parse("1,2,3,4,5"),因为"1,2,3,4,5" 是无效的JSON 而失败.)
  • @Andy:不,你不需要在 JS 上再次解析。当你使用 json_encode() 时,它会在 JS 获得 JSON 对象
  • 我每天都在学习新东西。

标签: javascript php arrays split json


【解决方案1】:

alert(obj) 将数组转换为字符串。 JavaScript 中的数组到字符串的转换基本上是使用this.join(",") 完成的(不完全是,但足够接近)。

你不必对obj 做任何事情来使它成为一个数组,它是一个数组!所以只要访问alert(obj[1]),你就会得到2。

【讨论】:

    【解决方案2】:

    这不是 PHP 数组。你的意思是array(1, 2, 3, 4, 5);?

    像这样使用json_encode 会创建一个带有JavaScript 对象或数组字面量的字符串,但由于您将它直接输出到JavaScript 中,所以它不是字符串,而是JavaScript 中的数组。查看生成的源代码。它将是:

    var obj = [1, 2, 3, 4, 5];
    

    不是

    var obj = "[1, 2, 3, 4, 5]";
    

    也没有

    var obj = "1, 2, 3, 4, 5";
    

    所以你不需要拆分它(没有要拆分的字符串)。只需直接访问对象(或本例中的数组):

    alert(obj[0]); // Shows 1
    

    提示:不要使用alert() 进行调试。请改用console.log() 并查看控制台。在那里更容易看出它是一个数组而不是一个字符串。

    【讨论】:

    • "提示:不要使用 alert() 进行调试。请改用 console.log()... 提示:不要使用 console.log 进行调试。使用 调试器 进行调试。您的浏览器中内置了一个,可让您单步执行代码、检查变量等 :-) +1 以获得出色的信息(包括该提示)。
    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 2017-08-11
    • 2018-10-10
    • 2019-12-08
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多