我试图在不知道此文档的ID的情况下获取特定文档。由于我使用Mongolab,我无法查询ID,因为我让Mongolab生成这些ID。
我设法提醒整个集合,但是当我尝试添加查询属性时,它会在警报中弹出“未定义”!
有效的代码,并提醒整个集合:
var xhrGet = new XMLHttpRequest();
xhrGet.open("GET", 'https://api.mongolab.com/api/1/databases/MYBASE/collections/MYCOLLECTION&apiKey=MYAPIKEY');
xhrGet.onreadystatechange = function(){
existingUrl = xhrGet.responseText;
alert(existingUrl);
}
xhrGet.send();
提供Mongolab JSON格式的剪辑:
{
"_id": {
"$oid": "MongoLab ID"
},
"visited": {
"url": "SomeURL",
"weight": 1
}
}
我的问题是我只想访问此JSON文件的“url”字段。当我尝试将例如.visited或.visited.url添加到警报时;它变得“未定义”。
alert(existingUrl.visited);
和
alert(existingUrl.visited.url);
都是未定义的!
对此有何想法和解决方法?
解决方案(在@furrypet的帮助和一些更详细的阅读中):
var xhrGet = new XMLHttpRequest()
xhrGet.open("GET", 'https://api.mongolab.com/api/1/databases/MYBASE/collections/MYCOLLECTION?q={"visited.url": "' + THEURL + '"}&apiKey=MYAPIKEY');
xhrGet.onreadystatechange = function(){
var response = JSON.parse(xhrGet.responseText);
for(var i = 0; i < response.length; i++){
var temp = response[i];
alert(temp.visited.url);
}
}
答案 0 :(得分:0)
使用responseText,您的响应的格式格式是纯文本,这意味着您无法像JSON对象那样对其进行操作。
您可以更改使用的方法,例如将其替换为responseXML以获取XML格式,但我建议您使用JSON.parse将响应字符串转换为JSON。
添加如下内容:
response = JSON.parse(existingUrl);
您应该能够查询响应对象。有关详情,请点击此处https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest和此处https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/JSON/parse
编辑:
根据OP的建议,这是一个简单的例子:
// The string should be a valid JSON
var jsonString = '{"hello":"world"}';
var jsonObj = JSON.parse(jsonString); // Returns 'Object { hello: "World" }
// Now you can use jsonObj like a regular JSON Object. Therefore :
jsonObj.hello; // will output "World"
// Reciprocally, if you want to turn a JSON into a string, you may use:
JSON.stringify(jsonObj); // returns "{"hello":"world"}"