1

任何人都可以在进行 .post 查询时解释 json_encode 的目的。

这是我在其他人的编码中经常看到的。

.post php 脚本

    ...
    ...

    echo json_encode($a);

我的意思是,如果我想从 .post 脚本返回并通过 .post 返回一个数组。我不需要做以下事情吗?

.post php 脚本

    ...
    ...
    $a = array("foo", "bar", "hallo", "world");
    $string=implode(',',$a) in my php script        

    return $string;

javascript

    $.post('$url',function(data){
        data_arr=data.split(',');
        //After which just get the values in the array
        alert(data_arr[0]); //ALERTS 'foo'
        alert(data_arr[1]); //ALERTS 'bar'
    });

如果有人可以帮我解决这个问题并让我看到在此目的中使用 json 的光明,那就太好了。

也许这也是由于我对 JSON 的不了解。

如果有人能告诉我为什么在这种情况下使用 JSON 编码更好,以及我想如何通过 .post 请求使用它而不是仅仅回显字符串并稍后拆分它,我将不胜感激。

谢谢。

4

2 回答 2

2

使用json_encode可确保您的数据始终有效。

您可以控制的简单数据并不重要,但想象一下,如果有一天您在其中一个值中有一个逗号。使用 JSON 编码的字符串,您不必担心任意分隔符标记。

此外,使用 JSON,您可以轻松地对对象/数组进行编码,而无需重新发明轮子。

于 2013-02-08T02:59:22.420 回答
1

首先,在我看来和实践中,JSON 语法与 Javascript 对象非常相似,并且在处理必须在以后发送/请求和解析的更复杂的数据类型时非常有用。

例如:如果您正在执行一个发布请求并且您正在序列化您验证服务器端的所有表单字段(使用 PHP),那么您很可能需要key => value使用textbox_name => value. 这样做比通过数字索引选择值更合乎逻辑(如果表单布局发生变化怎么办?)

使用逗号的示例代码:

<?php
$array = array('Tom', 'Hanks', 'Football');
$string = join(',',$array);
echo $string; //it's obvious - the output is Tom,Hanks,Football
?>

接收字符串的 javascript

$.post(url,{},function(data){
   var values = data.split(',')
   $("#name").text(values[0]);
   $("#surname").text(values[1]);
   $("#interests").text(values[2]);
});

所以有道理吗?但是这样做不是更有意义吗:

<?php
header('Content-type: application/json');
$array = array('name' => 'Tom', 'surname' => 'Hanks', 'interests' => 'Football');
echo json_encode($array);
?>

和javascript:

$.post(url,{},function(data){
   for(index in data) {
      $("#"+index).text(data[index]);
   }
   //or
   $("#name").text(data.name);
   $("#surname").text(data.surname);
   $("#interests").text(data.interests);
});

使用 Javascript 解析响应数据也是如此。拥有一个对象比拥有一个 CSV 字符串更符合逻辑。

显然,这取决于用例,但一般来说,JSON 为您提供了字符串化对象/数组的逻辑结构,可以将其转换回对象和数组,并以任何方式循环或操作。

JSON现在也是一个标准。每个人都使用它,这意味着它不是无缘无故的。换句话说 - JSON 数据更有意义。

于 2013-02-08T03:24:27.300 回答