2017-05-24 26 views
0

我試圖做一個ajax請求來檢查是否可以訪問自動生成的對象內部的title屬性,所以我不知道它的名字。所以這裏是我所做的:爲什麼我無法使用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

是'pages'的'array'或'object'? –

+0

您是否嘗試過使用點訪問對象?即'data.query.pages'和'data.query.pages [i] .title'? – lu1s

+0

也許你用'JSON'格式獲得對象?嘗試在對它執行任何操作之前解析你的數據,例如'JSON.parse(data)' – Dmitry

回答

0

你試試登出i?你會看到i是一個字符串,這是因爲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一個錯誤的想法。 –

相關問題