-3

ajax 呼び出しで、JSON オブジェクトを取得し、長さプロパティを通じて結果の数をカウントします。しかし、別のコードでは、同じ種類の呼び出しとサーバー側スクリプトへのわずかな変更により、長さプロパティは常に未定義のままになります。なんで?開発者コンソールでは、msg は配列ではなく、オブジェクトのように扱われることに注意してください (JSON から ajax によって自動的に変換されます)。

$.ajax({
  url : 'richiediListaVideo.php',
  type : 'POST',
  data :  data,
  dataType : 'json',
  success : function (msg) 
            {
              alert(msg['videos'].length)


            },

「未定義」の長さが次のようなオブジェクト

-video
--title
--duration
---tags
---8  "funny"
---1352  "animals"
---13    "Tv"

私の目標は、タグの長さを取得することであり、msg['video']['tags'].lengthを書きました。

これは「msg」の文字列化されたバージョンです

{"video":{"duration":"5:51","views":"2650","video_id":"512498","rating":"5.00","ratings":"5","title ":"素敵な犬", "publish_date":"2013-08-05 16:50:08","tags":{"8":"面白い", "54":"笑","75":"動物","89":"庭"}}}

明確化: とにかく、タグの数を数える方法は知っていますが、ポイントは、なぜこれが起こるのかを本当に知りたいということです


とにかく、タグの数を数える方法を知っています

var length=0; 
for(var elemy in res['video']['tags']) length++

しかし要点は、なぜこれが起こるのかを本当に知りたいということです

4

2 に答える 2

1

これはあなたの結果です:

{"tags":{"8":"funny", "54":"lol","75":"Animals","89":"Garden"}}

そのため、使用できなくなります.length
このようなものがあれば、デモを見てください:

var res = 
{ "tags": [
     {"8":"funny"}, 
     {"54":"lol"},
     {"75":"Animals"},
     {"89":"Garden"}
]}

その後.length、に取り組みres['tags'].lengthます。

于 2013-08-07T02:27:55.543 に答える
0

とにかく、タグの数を数える方法を知っています

var length=0; 
for(var elemy in res['video']['tags']) length++

しかし要点は、なぜこれが起こるのかを本当に知りたいということです

これが発生する理由res['video']['tags']は、中かっこで定義されたオブジェクトで{...}あり、適切な配列ではないため長さプロパティを持たないためです。適切な配列 (それらを定義する 1 つの方法は、角括弧を使用することです[]) には、長さのプロパティがあります。

注: 名前付きプロパティ (つまり、整数でインデックス付けされていない) は、配列の長さの一部としてカウントされませんが、配列に追加することもできます。その逆も同様です。番号付きのプロパティをオブジェクトに追加できます。

于 2013-08-07T02:13:10.723 に答える