2016-03-28 43 views
0

私はphpを使用していて、json_encode()関数を使用しています。JSON配列を返す/エコーしました。私はところで、私のJavascriptでこのコードを使用JSON.stringifyを使用してJSON配列にアクセスできない

[{"id":"1132","city":"Manila Central Post Office","province":"Manila"}] 

:私は、取得に成功し、このデータをjqueryのAJAXを使用した

var val = jQuery.parseJSON(JSON.stringify(result)); 

をし、私のようなアレイ上のデータにアクセスしようとしたとき、

console.info(val.city); // results to undefine 

それは私に「未定義」の結果を与えます。私はForループをやってみましたが、まだ動作しません。たぶん私は間違って何かをしている、どんな助けも素晴らしいだろう。 THANKS

Ajaxコード:

$.ajax({ 
    type: 'POST', 
    url: path, 
    cache: false, 
    data: postData, 
    success: function (result) { 
     var val = jQuery.parseJSON(JSON.stringify(result, false, replacer)); 
     var val2 = jQuery.parseJSON(val); 
     console.info(val2); 
     console.info(val2.id); 
    }, 
    error: function (e) { 
     $("#sys_msg").html(e); 
     $("#myModal").modal({ 
      show: true, 
      backdrop: false, 
      keyboard: true 
     }); 
    } 
}); 
+0

'val'は配列で、' city'キーを持つオブジェクトはその配列の最初の項目です。とにかく文字列化して再解析するのはなぜですか? – jonrsharpe

+0

上記の質問にajaxコードを追加できますか? – Jai

+0

var val = jQuery.parseJSON(JSON.stringify(result、false、replacer)); var val2 = jQuery.parseJSON(val); –

答えて

1

valは配列です。以下のようにindexを指定する必要があります。

var result = [{ "id": "1132", "city": "Manila Central Post Office", "province": "Manila" }]; 
 
var val = jQuery.parseJSON(JSON.stringify(result)); 
 
alert(val[0].city);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
ここ

+0

[オブジェクト{id = "1132"、都市= "マニラ中央郵便局"、省= "マニラ"}]。それは再び物体に戻りました。 –

+0

JSONデータを抽出できたので投票しました。感謝:) –

+0

実際には、この 'var val = jQuery.parseJSON(JSON.stringify(result));'行を使用する必要はありません。 'result [0] .city'を直接使うことができます。 @JomarLlevado – Azim

1

valオブジェクトの配列ですので、あなたはval.cityを呼び出して直接city値にアクセスすることはできません。返されるデータがすでにjson_encode()を使用してエンコードされている場合は、単に$.parseJSON(data)を使用する必要があります。次のコードスニペットは、this-

var temp = '[{"id":"1132","city": "Manila Central Post Office", "province":"Manila"},{"id":"1133","city": "Another Test Post Office", "province":"Test"}]'; //Defined temp as string since the data response returned from the server should also be a json encoded string. 
 

 
var val = $.parseJSON(temp); 
 

 
$.each(val, function(index, item) { 
 
    var city = item.city; 
 
    $('.container').append('City: '+city+'<br/>'); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
 
<div class="container"></div>

+0

これは何とか問題のいくつかを解決します。ありがとう –

+0

@JomarLlevado他にどんな問題がありますか? –

+0

私はデータを取得しようとしていますが、これはあなたが私に与えるものであり、入力などの指定されたhtml DOMに入れようとしています。 –

0

参照を行う方法を示し、問題を簡単にdataType:"json"によって解決することができます。これがあなたのajaxコードに添付されていない場合、返される応答はjson文字列になります。この場合は、jQuery.parseJSON()またはJSON.parse()と解析する必要があります。

したがって、dataTypeをajaxに追加するか、代わりに解析するだけです。 dataType

success: function(result){ 
    var val = jQuery.parseJSON(result); // or JSON.parse(result); 
    console.info(val[0].city); 
}, 

$.ajax({ 
    type: 'POST', 
    url: path, 
    cache: false, 
    data: postData, 
    dataType: 'json', //<-----add this here 
    success: function(result) { 
    for (o in result) { // <----and just use this way 
     console.info(o.city); 
    } 
    }, 
    error: function(e) { 
    $("#sys_msg").html(e); 
    $("#myModal").modal({ 
     show: true, 
     backdrop: false, 
     keyboard: true 
    }); 
    } 
}); 
0

あなたはそれが再びJSONにそれを解析stringifyする必要はありません。 AJAXにdataType: "json"を追加するだけです。

$.ajax({ 
    type: 'POST', 
    url: path, 
    cache: false, 
    data: postData, 
    dataType: "json", 

    success: function (result) { 

     console.info(result); 
     console.info(result.id); 
    }, 
    error: function (e) { 
     $("#sys_msg").html(JSON.stringify(e)); 
     $("#myModal").modal({ 
      show: true, 
      backdrop: false, 
      keyboard: true 
     }); 
    } 
}); 
関連する問題