通过JSON发送和解码对象数组

时间:2013-03-12 01:43:01

标签: php jquery ajax json object

我有一组People个对象。我正在将它们发送到PHP,但是用PHP重新获取对象的方式让我可以操作它们似乎令人费解。这就是我所拥有的,但它似乎没有将任何内容返回给我的AJAX Call。现在我在我的阵列中只有1个Person对象,但我想确保在我前进之前一切正常。简而言之,当我解码我的JSON不应该将它转换为PHP中的对象?最后,我想要一个People

的PHP对象数组

Jquery的

var people = new Array();
var person = new Person("Michael", "Jackson", 50);
localStorage.setItem(person.firstName + " " + person.lastName, JSON.stringify(person));

function Person(firstName, lastName, age)
{
    this.firstName=firstName;
    this.lastName=lastName;
    this.age=age;
}

function getStorage(){
    var tempPerson;
    for(var i = 0; i < localStorage.length; i++)
    {
        tempPerson = $.parseJSON(localStorage.getItem(localStorage.key(i)));
        people.push(tempPerson);
    }
}

function getPeople(){
    $.post(
        "people.php",
        {people : people},
        function(data) 
        {
            alert(data);
        }
    );
}

getStorage();
getPeople();

PHP

<?php
$personObj = Array();
$people = $_POST['people'];

for($i = 0; $i < count($people); $i++)
{
    foreach($people[$i] as $person)
    {
        $streamObj = json_decode($person);
    }
}

echo $personObj->$firstName;

3 个答案:

答案 0 :(得分:2)

除了进行@Even Hahn建议的更改外,您还需要更改发布的数据,如下所示:

$.post(
    "people.php",
    {people : JSON.stringify(people)},
    function(data) 
    {
        alert(data);
    }
);

这样就会发布单个名称/值对。名称为“people”,值为Person个对象数组的JSON编码字符串。

然后,当您在PHP代码中调用以下内容时,您正在将该JSON编码的字符串解码为PHP端的数组。

$people = json_decode($_POST['people']);

我也看到你将$personObj指定给数组的位置,但我看不到你在数组中放置任何内容。

答案 1 :(得分:1)

尝试在PHP中移动JSON解码:

$personObj = Array();
$people = json_decode($_POST['people']);

for($i = 0; $i < count($people); $i++)
{
    foreach($people[$i] as $person)
    {
        $streamObj = $person;
    }
}

echo $personObj->$firstName;

这是因为$_POST['people']是需要解码的JSON字符串。

答案 2 :(得分:0)

也许PHP代码应如下所示:

<?php
$personObj = Array();
$people = $_POST["people"];

foreach($people as $p)
{
    $val = str_replace("\\","",$p);
    $personObj = json_decode($val);
}

echo $personObj->firstName;
?>