Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript XMLHttpRequest从Mongolab获取文档_Javascript_Json_Xmlhttprequest_Mlab - Fatal编程技术网

使用Javascript XMLHttpRequest从Mongolab获取文档

使用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

我试图在不知道此文档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格式的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"}"