php ajax没有返回预期的结果,可能是json解码问题

时间:2017-02-19 00:59:21

标签: javascript php json ajax

将以下代码粘贴到PHP中。

        $json = '[{"id":1,"quantity":1},{"id":2,"quantity":2},{"id":3,"quantity":3}]';
        $json2 = json_decode($json);

        foreach($json2 as $item){
            $item->total = 9;
        }

        foreach($json2 as $item){
            print_r($item);
             echo "<br>";
        }

        echo json_encode($json2);

以上代码将显示以下结果。我将这称为预期结果&#34;

stdClass Object ( [id] => 1 [quantity] => 2 [total] => 9 ) 
stdClass Object ( [id] => 1 [quantity] => 2 [total] => 9 ) 
stdClass Object ( [id] => 1 [quantity] => 2 [total] => 9 ) 
[{"id":1,"quantity":2,"total":9},{"id":1,"quantity":2,"total":9},{"id":1,"quantity":2,"total":9}]

现在,遵循相同的逻辑。粘贴下面的java脚本

function test(){
    var json = [{"id":1,"quantity":1},{"id":2,"quantity":2},{"id":3,"quantity":3}]; 
    $.ajax({
            url: base_url+"Product/ajax_test",
            type: "POST", 
            dataType: "JSON",
            data: {
                    'json':json,
                }, 
            success:function(data){
                console.log(data);
            }//end success function
        });//end of ajax  
}

并粘贴下面的php,如果有帮助,我正在使用codeigniter框架工作

  public function ajax_test(){
    $json = $this->input->post('json');
    $json2 = json_decode($json);
    foreach($json2 as $item){
        $item->total = 2;
    }
    echo json_encode($json2);
   }

我希望上面的两段代码在控制台中显示类似于我的预期结果&#34;,但在控制台中没有显示任何内容。如果我将上面的代码更改为以下

public function ajax_test(){
        $json = $this->input->post('json');

        foreach($json as $item){
            $item["total"] = 2;
        }
        echo json_encode($json);
    }

上面的代码将在控制台中显示结果。 &#34;总计&#34;属性不在最终结果中,好像它只是简单地回放了原始的$json变量。我也需要使用$item["total"]代替$item->total,这也很奇怪。

问题1,上面我做错了什么? 问题2,由于PHP是无状态的,有没有办法让我麻烦拍摄ajax,通过在没有json编码的情况下回显出控制台中的php页面?如果这有意义的话。

1 个答案:

答案 0 :(得分:0)

json_decode()可以将JSON对象解码为对象或数组。

$json = '[{"id":1,"quantity":1},{"id":2,"quantity":2},{"id":3,"quantity":3}]';
$json_with_objects = json_decode($json);
$json_with_arrays = json_decode($json, true);

echo $json_with_objects[0]->quantity;
echo $json_with_arrays[0]["quantity"];

var_dump($json_with_objects);
var_dump($json_with_arrays);

据推测,虽然我们无法知道,因为您没有提供它,您的代码$this->input->post()正在使用关联数组而不是对象进行解码。