8

I am trying to fire a XMLHttpRequest to mongoDB to retrieve a document via AJAX.

This is my code:

function getJsonDocumentByModeldid(model_id) {
    var valoreInput = document.getElementById('inputModelId').value;
    alert(valoreInput);

    $.ajax({
      url: "http://localhost:28017/test/",
      type: "get",
      //data: "filter_a=" + valoreInput,
      dataType: 'jsonp',
      crossDomain: true,

      success: function (data) {
        alert("success");
        //var json2javascript = $.parseJSON(data);
        manageLayout();
      },

      error: function (XMLHttpRequest, textStatus, errorThrown) {
       alert("Status: " + textStatus + "    Error:" + errorThrown);
      }
  });
}

My function always returns an error. So what is the problem?

4

2 回答 2

7

此功能作为简单(只读)REST 接口的一部分得到支持,但要进行跨域请求,--jsonp否则您将遇到同源策略问题,因为您发出请求的 IP 地址和端口不匹配 mongoDB 运行的 IP 地址和端口。

使用(以及您可能拥有的任何其他选项)启动mongoDB 。mongod.exe --rest --jsonp

下面的示例页面可以通过 Web 服务器(例如Apache HTTP Server)提供,也可以简单地保存在本地并作为文件加载到浏览器中。该请求是关于一个名为andyb的 dbCollection 的信息,我首先在 mongoDB 中创建了它:

db.createCollection('andyb');

HTML

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>mongoDB AJAX demo</title>
  <script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script>
  <script type='text/javascript'>//<![CDATA[
  $(function(){
    $.ajax({
      url: 'http://localhost:28017/local/andyb',
      type: 'get',
      dataType: 'jsonp',
      jsonp: 'jsonp', // mongod is expecting the parameter name to be called "jsonp"
      success: function (data) {
        console.log('success', data);
      },
      error: function (XMLHttpRequest, textStatus, errorThrown) {
        console.log('error', errorThrown);
      }
    });
  });//]]>
  </script>
</head>
<body>
</body>
</html>

许多浏览器现在支持CORS,这是一种促进跨域资源的替代(更现代)方式。

于 2013-04-25T10:05:30.147 回答
0

可以通过使用延迟对象来修改前面的答案(请参阅这个很好的指南:“如何从异步调用返回响应?):

<!doctype html>
<meta charset="utf-8">
<title>mongoDB AJAX demo</title>
<script src="http://code.jquery.com/jquery-latest.min.js" ></script>
<script>    
    $(function(){ 
    // add rest = true and jsonp = true to /etc/mongodb.conf, 
    // then restart mongodb
         $.ajax({
                url: "http://localhost:28017/local/startup_log/",
                type: 'get',
                dataType: 'jsonp',
                jsonp: 'jsonp', // mongodb is expecting that                                                                                     
            })
            .done(function(data) {
                d=JSON.stringify(data,undefined,1);
                $("code").text(d).css("color","green");
            })
            .fail(function(request,status,error) {
                $("code").text("get failed: "+error).css("color","red");
            })
            .always(function() {
                console.log("finished")
            })

  });
</script>
<body>
  <pre>
    <code>
    </code>
  </pre>

无论如何,在这两种情况下,error:andfail()处理仅在未提供端口时才有效。例如:

url:"localhost/asdasdasd"

导致错误处理;尽管

url:"localhost:28017/asdasdasd"

在控制台中产生 404 日志,如下所示:

GET http://localhost:28017/?jsonp=jQuery110207253803350031376_1383522587177&_=1383522587178 404 (OK) 
于 2013-11-03T23:42:28.043 回答