2017-05-24 8 views
0

私は、自動的に生成されるオブジェクトの内部にあるtitle属性にアクセスできるかどうかを確認するためにajaxリクエストを作成しようとしているため、その名前を知ることができません。だからここに私がやったことだ:なぜこの変数のプロパティにAjaxでアクセスできないのですか?

$.ajax({ 
      type: 'GET', 
      dataType: 'json', 
      url: 'https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=apple', 
      success: function(data){ 
       //console.log(data['query']['pages']['856']['title']); 
       for (const i in data['query']['pages']){ 
        console.log(i['title']); 
       } 
      } 
     }) 

は、しかし、それは、応答として「未定義」を私に戻っています。私がconsole.log(i)だけを残すと、すべてのことが正しく示されます。すでにi.titleと何も試していません。誰でも助けてくれますか?

+1

が '' array' pages'や 'object'されますか? –

+0

ドットでオブジェクトにアクセスしようとしましたか? 'data.query.pages'と' data.query.pages [i] .title'? – lu1s

+0

オブジェクトが 'JSON'形式で取得されることがありますか?何か操作を実行する前にこの 'JSON.parse(data)'のようなデータを解析してみてください。 – Dmitry

答えて

0

ログアウトしようとしましたiiが文字列であることがわかります。for..inキーのオブジェクトで、値ではないからです。値を取得するには、元のオブジェクトのキーを使用する必要があります。

let obj = { 
 
    a: 1, 
 
    b: 2, 
 
    c: 3 
 
}; 
 

 
for (let key in obj) { 
 
    console.log(`Key: ${key}`); 
 
    console.log(`Value: ${obj[key]}`); 
 
}

だからあなたのコードの書き換えバージョンは次のようになります。

$.ajax({ 
    type: 'GET', 
    dataType: 'json', 
    url: 'https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=apple', 
    success: function(data) { 
    // Accessing properties with a . is the same as 
    // using ['key'] 
    for (let i in data.query.pages){ 
     console.log(data.query.pages[i].title); 
    } 
    } 
}); 
2

変数iは、あなたのオブジェクトのキーではなく、オブジェクトそのものです。

あなたはiが、それはあなたが使用する必要があり、キーのあることをオブジェクトにアクセスする場合:

data['query']['pages'][i] 

あなたのコードは次のようになります。以上行くには良い方法という

$.ajax({ 
     type: 'GET', 
     dataType: 'json', 
     url: 'https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=apple', 
     success: function(data){ 
      //console.log(data['query']['pages']['856']['title']); 
      for (const i in data['query']['pages']){ 
       console.log(data['query']['pages'][i]['title']); 
      } 
     } 
    }) 

注意オブジェクトのキーが使用されていますObject.keys(obj)

だから私が代わりにこのコードを使用します。

$.ajax({ 
     type: 'GET', 
     dataType: 'json', 
     url: 'https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=apple', 
     success: function(data){ 
      //console.log(data['query']['pages']['856']['title']); 
      Object.keys(data['query']['pages']).forEach(function(key) { 
       console.log(data['query']['pages'][key]['title']); 
      }) 
     } 
    }) 
+0

ダウン投票者が説明するといいですね。ありがとう! – Dekel

+0

彼らはほとんど説明しない、あなたはそれに慣れている必要があります。 – Barmar

+0

私はそれに慣れています。 – Dekel

0

あなたdata['query']['pages']としてアクセスすることができます。console.log(data['query']['pages'][i]['title'])

+0

'data ['query'] ['pages']'は配列ではありません。それはオブジェクトです。ダブルチェック。 – Dekel

+0

'data ['query'] ['pages']'はオブジェクトです。 OPはそれを配列として扱っていたので、エラーです。あなたの実際のコードソリューションはうまくいくが、それはなぜOPに誤った考えを与えるだろう。 –

関連する問題