使用 Javascript XMLHttpRequest 从 Mongolab 获取文档

Getting documents from Mongolab with Javascript XMLHttpRequest

我试图在不知道该文档 ID 的情况下获取特定文档。由于我使用的是 Mongolab,因此无法查询 ID,因为我让 Mongolab 生成了这些 ID。

我已经设法提醒整个集合,但只要我尝试添加查询属性,它就会在提醒中弹出 "undefined"!

有效并提醒整个集合的代码:

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 添加到警报时;它变成 "undefined"。

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);
      }
    }

使用 responseText,您的响应格式是纯文本,这意味着您不能像 JSON 对象那样操作它。

您可以更改使用的方法,例如将其替换为 responseXML 以获得 XML 格式,但我建议您使用 JSON.parse将您的响应字符串变成 JSON.

所以添加如下内容:

response = JSON.parse(existingUrl);

并且您应该能够查询响应对象。有关详细信息,请在此处查看 https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest and here 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"}"