使用Javascript XMLHttpRequest从Mongolab获取文档

时间:2015-01-21 12:28:24

标签: 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/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);
      }
    }

1 个答案:

答案 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"}"