2015-08-29 128 views
0

我对bing API做了一个javascript查询。在JavaScript中使用XML-http功能。阅读xmlhttp对象

如果我打印

xmlhttp.responseText; 

它正确地返回这样一个对象:

{ 
    "d":{ 
     "results":[ 
     { 
      "__metadata":{ 
       "uri":"Data.ashx/Bing/SearchWeb/v1/Web?Query=\u0027weltall\u0027&$skip=0&$top=1", 
       "type":"WebResult" 
      }, 
      "ID":"ec45ae51-c52b-4172-b64e-97f0db106110", 
      "Title":"Universum – Wikipedia", 
      "Description":"Universum, Weltall und Weltraum. Das Wort „Universum“ wurde im 17. Jahrhundert von Philipp von Zesen durch das Wort „Weltall“ eingedeutscht.", 
      "DisplayUrl":"/wiki/Universum", 
      "Url":"/wiki/Universum" 
     }, 
     { 
      "__metadata":{ 
       "uri":"Data.ashx/Bing/SearchWeb/v1/Web?Query=\u0027weltall\u0027&$skip=1&$top=1", 
       "type":"WebResult" 
      }, 
      "ID":"8703f1c8-f3b7-48b0-b2cf-e33071b5006e", 
      "Title":"Weltall - Wissenschaft - SPIEGEL ONLINE", 
      "Description":"Nachrichten aus der Wissenschaft über Mensch und Technik, Natur und Weltall. Aktuelle Reportagen, Analysen, Interviews.", 
      "DisplayUrl":"/wissenschaft/weltall", 
      "Url":"spiegel.de/wissenschaft/weltall/" 
     } 
     ] 
    } 
} 

到目前为止好。但是,当我尝试访问所述对象的单个属性时,没有任何回复:

document.getElementById("main").innerHTML = xmlhttp.d.results.uri[1]; 

该行似乎存在错误。我想到了像嵌套列(.d.results.uri部分)和行([1]部分))的数据库对象。

+2

'responseText'顾名思义不是一个对象,而是一个字符串。你需要JSON.parse()它。此外,你正在分配'xmlhttp.d.results.uri [1]',但即使responsText是一个对象,它应该是'xmlhttp.responsText.d.results.uri [1]' – marekful

+0

'responseText'是一个字符串,不是一个东西。你需要先使用JSON.parse。在另一个说明中,请花点时间在下次正确设置问题时,它确实不那么难。 – Tomalak

+0

@marekful,你为什么不把它写成答案? – Shomz

回答

1

xmlhttp对象包含响应数据中的responseText属性。因为你面对的JSON你也可以选择使用JavaScript的JSON.parse()因此解析,你应该能够使用这个片段让你期望的响应数据:

data = JSON.parse(xmlhttp.responseText); 

另外,我不认为你正在尝试访问正确的节点,因为d.results.uri[1]在您向我们显示的json中不存在。

试着想象你的json。我通常使用this。它允许你通过简单的点击并复制它的路径来获得你想要的节点。