使用Javascript XMLHttpRequest从Mongolab获取文档
我试图在不知道此文档ID的情况下获取特定文档。因为我使用的是Mongolab,所以无法查询ID,因为我让Mongolab生成这些ID 我已经成功地提醒了整个集合,但只要我尝试添加查询属性,它就会在提醒中弹出未定义的窗口 有效的代码,并向整个集合发出警报:使用Javascript XMLHttpRequest从Mongolab获取文档,javascript,json,xmlhttprequest,mlab,Javascript,Json,Xmlhttprequest,Mlab,我试图在不知道此文档ID的情况下获取特定文档。因为我使用的是Mongolab,所以无法查询ID,因为我让Mongolab生成这些ID 我已经成功地提醒了整个集合,但只要我尝试添加查询属性,它就会在提醒中弹出未定义的窗口 有效的代码,并向整个集合发出警报: var xhrGet = new XMLHttpRequest(); xhrGet.open("GET", 'https://api.mongolab.com/api/1/databases/MYBASE/collections/MYC
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格式的snip:
{
"_id": {
"$oid": "MongoLab ID"
},
"visited": {
"url": "SomeURL",
"weight": 1
}
}
我的问题是,我只想访问这个JSON文件的url字段。当我尝试将例如.visted或.visted.url添加到警报时;它变得没有定义
alert(existingUrl.visited);
及
都没有定义
对此有什么想法和解决办法吗
借助@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);
}
}
使用responseText,响应的格式是纯文本,这意味着您不能像处理JSON对象一样对其进行操作 您可以更改所使用的方法,例如用responseXML替换它以获得XML格式的,但我建议您使用JSON.parse将响应字符串转换为JSON 因此,添加如下内容:
response = JSON.parse(existingUrl);
您应该能够查询响应对象。有关更多信息,请查看此处和此处
编辑:
根据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"}"
这成功了,谢谢你的帮助!若有人想知道:@furrypet所建议的内容使JSON对象成为服务器响应的对象。因此,如果您想使用这些,只需做一个循环来迭代它们,并按照您的意愿打印结果@克里斯:是的,没错,谢谢你的精确性。我可能会用你的评论编辑我的答案:
// 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"}"