0

我有一个People对象数组。我将它们发送到 PHP,但是将我的对象返回到 PHP 中以便我可以操作它们的方法似乎很复杂。这就是我所拥有的,但它似乎没有将任何内容返回给我的 AJAX 调用。现在我Person的数组中只有 1 个对象,但我想在前进之前确保一切正常。简而言之,当我解码我的 JSON 时,它不应该将它转换为 PHP 中的对象吗?最后,我想要一个 PHP 对象数组,它们是People

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;
4

3 回答 3

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给数组的位置,但我没有看到您在数组中放置任何内容的位置。

于 2013-03-12T02:17:07.153 回答
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 字符串。

于 2013-03-12T01:55:26.070 回答
0

也许 PHP 代码应该是这样的:

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

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

echo $personObj->firstName;
?>
于 2013-03-12T02:38:18.833 回答