2015-09-15 34 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']);無效( –