使用json-decode将json-serialized字符串分配到php数组中

时间:2013-07-30 12:58:38

标签: php jquery json

我想将使用$ .ajax的JSON序列化的字符串传递给外部php文件,以便分配给常规数组。

这是我到目前为止所得到的,它没有显示taskContent数组的第0个索引。

JQuery代码:

$(".json").click(function() {
            var allTaskArr = [];
            $('#appendTask .taskbox').each(function(index,domEle){
            //domEle == this
            allTaskArr[index] = $(domEle).val();
            });
        var allTaskStr = '{"taskContent":'+JSON.stringify(allTaskArr)+'}';

            $.ajax({
                url:'testjson.php',
                type:"POST",
                datatype:'json',
                data:allTaskStr

            });
 });

PHP文件:

 $jsonContent = $_POST['taskContent'];
 $taskContent = json_decode($jsonContent,true);         
 echo $taskContent[0];

2 个答案:

答案 0 :(得分:1)

在此次修改前忽略此帖子。

这是你的问题:

var allTaskStr = '{"taskContent":'+JSON.stringify(allTaskArr)+'}';

应该是:

var allTaskStr = {"taskContent":JSON.stringify(allTaskArr)};

data:,需要一个对象,然后发送一个字符串。

答案 1 :(得分:1)

你说:

  

@Spudley我收到'Undefined Index:taskContent'消息。

原因是PHP没有收到名为tastContent的帖子变量。

原因是您没有正确发送JSON。

在jQuery代码中,您生成一个JSON字符串,然后将其放在ajax调用的data元素中。实际上,data元素应该被赋予一个对象,而不是一个json字符串;它将它编码为json本身,所以如果你首先给它json,PHP程序将接收一个双重编码的字符串 - 即一个json字符串,它解码为另一个json字符串。

所以不要这样:

var allTaskStr = '{"taskContent":'+JSON.stringify(allTaskArr)+'}';

...您需要将数据作为对象发送,如下所示:

var allTask = {taskContent:allTaskArr};

或者直接进入ajax调用:

data : {taskContent:allTaskArr}

希望这有助于您走上正确的轨道并解释问题所在。