2017-02-13 9 views
1

PHPとAjaxを使用してJSONを解析しています。 PHPはこのような配列を作成しています。jqueryを使用してJSON応答の項目を解析する

$myObj->pid = $_POST["parentid"]; 
$myObj->comp = $comp; 
$myObj->colour = $statuscolour; 
$myJSON = json_encode($myObj); 
header('Content-Type: application/json'); 
echo $myJSON; 

私は個々の変数を抽出することはできませんしかし、私は

Object {pid: "p1", comp: 20, colour: "red"} 

として最初にconsole.logからの出力を見ることができ、次のjQueryコード

$.ajax({ 
     type: "POST", 
     dataType: "json", 
     url: "msstatup.php", 
     data: data 
    }).done(function(msg) { 
    var response = jQuery.parseJSON(JSON.stringify(msg)); 
    console.log(response); 
    pid = response[0].pid; 
    console.log('id = ' + pid); 
    }); 

を使用し、それができますメッセージ

Uncaught TypeError: Cannot read property 'pid' 

どのように変数を抽出できますか?

+1

。 –

+2

JSONレスポンスを最初にストリング化して解析するのはなぜですか? – Connum

+0

単一のオブジェクトの場合は、レスポンスを配列として扱っているようです。 'console.log(response.pid)を試してみてください' – Andy

答えて

2

にダウンしていますので、あなたは、直接msgにだけアクセスすることができます。

また、それは、データオブジェクトを文字列化し、あなたはそれが必要以上に、これはより複雑に作った

var pid = msg.pid; 
console.log('id = ' + pid); 
0

まず、JSON応答を解析して解析する必要があるのはなぜですか?

第2に、アレイであるかのようにresponse[0]にアクセスしようとしていますが、そうではありません。単純に使用することができます

response.pid; 

オブジェクトキーにアクセスします。

あなたが応答を解析その後、文字列化する必要はないので、それはすべてあなたがオブジェクトではなく、配列を返すされている

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "msstatup.php", 
    data: data 
}).done(function(msg) { 
    console.log(msg.pid); 
}); 
+0

' msg.pid' 'response'を定義するコード行全体は必要ありません。 –

+0

それはダウンボトムの理由ですか? – Connum

+1

私はDVをしませんでした。しかし、もし私がその人であれば、元の最終結果が正しくないか、少なくとも「応答」を定義するコード行を補うためにDV'dを持っているでしょう –

4

を試してみて、再び

オブジェクトに戻ってその文字列を解析しても意味がありません。 msgは既にオブジェクトで、stringifyparseJSONという文字列に変換してオブジェクトに戻します。そして、配列のようにオブジェクトを使用しようとします。

これを試してください:あなたはJSONを返すしているので、あなたが `parseJSON`を使用する必要はありません

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "msstatup.php", 
    data: data 
}).done(function(msg) { 
    var pid = msg.pid; 
    console.log('id = ' + pid); 
}); 
関連する問題