2015-09-15 32 views
1

有人可以告诉我我在下面的代码中发生错误吗?我想读取json数组中1位置的标题。为什么json_decode不起作用?

<script> 
    $(document).ready(function(){ 
     $('#loading').click(function(){ 
      var NpPData = [ 
    { 
     "title": "Professional JavaScript", 
     "author": "Nicholas C. Zakas" 
    }, 
    { 
     "title": "JavaScript: The Definitive Guide", 
     "author": "David Flanagan" 
    }, 
    { 
     "title": "High Performance JavaScript", 
     "author": "Nicholas C. Zakas" 
    } 
]; 
      var NpPDataJSON = JSON.stringify(NpPData); 
      alert(NpPDataJSON); 
      $.post("prueba.php", NpPDataJSON, function(r){ 
        $('#result').html('Answer from server: '+r); 
       }, 
      'json').error(function(e){ 
       alert('FAiled: '+e.statusText); 
      }); 
     }); 

     }); 
    </script> 

和PHP:

$json = $_POST['NpPDataJSON']; 
$data = json_decode($json); 
echo $data[1]['title']; 
+2

你试过'{NpPDataJSON:NpPDataJSON}'的'$ .post'声明? – Stryner

回答

3

设置第二个参数TRUEjson_decode()返回一个array而不是stdClass对象:

$json = $_POST['NpPDataJSON']; 
$data = json_decode($json, true); // note the second argument 
echo $data[1]['title']; // returns 'JavaScript: The Definitive Guide' 

为真时,返回的对象会被转换成关联数组。


而且,按照@Strynercomment,看来你已经滥用了$.post()功能。您需要设置一个名称要传递到服务器,因此数据传递的对象,而不是一个变量:

$.post("prueba.php", {NpPDataJSON: NpPDataJSON}, function(r){/* ... */}, 'json'); 
+0

Thx!我做到了,但没有工作:(我没有得到我期望的结果 –

+0

你得到了什么结果,你期望得到什么结果? – D4V1D

+0

我将php代码更改为:$ json = $ _POST ['NpPDataJSON ']; $ data = json_decode($ json,true); var_dump($ data); echo json_encode($ data [1] ['title']);无效( –