【问题标题】:Send and Decode Object Array via JSON通过 JSON 发送和解码对象数组
【发布时间】:2013-02-27 09:54:44
【问题描述】:

我有一个 People 对象数组。我将它们发送到 PHP,但是将我的对象返回到 PHP 中以便我可以操作它们的方法似乎很复杂。这就是我所拥有的,但它似乎没有将任何内容返回给我的 AJAX 调用。现在,我的数组中只有 1 个 Person 对象,但我想在前进之前确保一切正常。简而言之,当我解码我的 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;

【问题讨论】:

    标签: php jquery ajax json object


    【解决方案1】:

    除了进行@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 分配给数组的位置,但我看不到您在数组中放置任何内容的位置。

    【讨论】:

      【解决方案2】:

      尝试在 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字符串。

      【讨论】:

      • 我试过了,它说它需要一个字符串。人是一个数组。我正在将它推入 getStorage() 的数组中;
      【解决方案3】:

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

      <?php
      $personObj = Array();
      $people = $_POST["people"];
      
      foreach($people as $p)
      {
          $val = str_replace("\\","",$p);
          $personObj = json_decode($val);
      }
      
      echo $personObj->firstName;
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        • 2014-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多