【问题标题】:How to get data from MongoDB on client side using javascript/jQuery如何使用 javascript/jQuery 在客户端从 MongoDB 获取数据
【发布时间】:2014-06-01 11:01:12
【问题描述】:

我在python中的bottle中编写了一个代码,它从mongodb获取数据,当用户从bottle中请求urlhttp://localhost:8080/index/test时,它将从mongoDB返回json结果。当我将浏览器指向该 url 时它工作正常,我可以在浏览器上看到所有结果。

但是,当我尝试从 jQuery ajax 发送请求时,我总是会出错,并且请求永远不会成功。

有没有人做过类似的事情可以和我分享他们的方法?

我的一般问题是,当使用瓶子作为服务器时,从客户端从 MongoDB 获取数据的最佳方式是什么。我在 Node.js 中看到了一些示例,但我想使用 python 作为服务器。

我已经使用了这个代码。

                   $.ajax({
                    type: "POST",
                    url: "http://localhost:8080/hello/test",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",                        
                    success: function (response) {

                        console.log("success");
                    },
                    error: function (response){

                        console.log("failed");
                    }
                });*/

我也试过这个:

                $.post( "http://localhost:8080/hello/test", d)
                  .done(function( response ) {
                      console.log("success");
                  });

这些都不行。我也尝试过 GET 而不是 post,但没有运气。

这就是我在 python 方面所拥有的:

从瓶子导入路线,运行,模板

@route('/hello/<name>')
def index(name):
    return {'status':'online', 'something':'blah blah'}

run(host='localhost', port=8080) 

非常感谢。

【问题讨论】:

  • 你能粘贴你正在使用的jquery AJAX代码吗?
  • 非常感谢@LalitAgarwal 的评论。我已经用我使用的 ajax 代码更新了我的帖子。
  • Python 肯定会返回 JSON 吗?出错时您会看到什么响应。
  • 检查 gulty 的答案,我相信这是一个 CORS 问题。如果您的应用程序未在 8080 上运行,则除非您允许 cors,否则您将无法访问 8080 端口。检查浏览器的投诉(如果是 chrome ctr shift j 将启动开发工具),我相信您会看到类似:No 'Access-Control-Allow-Origin' header is present on the requested resource.
  • @sWW 是的,它正在返回 JSON,当我转到浏览器并输入 URL 时,它会显示一个充满 JSON 对象的页面。

标签: javascript jquery mongodb bottle


【解决方案1】:

首先,'GET' 是更好的选择,因为您没有将任何参数传递给您的数据库。

其次,您的应用程序在哪个端口上运行?您将 8080 添加到您的请求中,这让我假设您的应用程序在不同的端口下运行。 JS 基于Same Origin Policy,这意味着如果你想从不同的 URL(不同的端口 = 不同的 url)访问数据,它不会给你任何响应数据。

要完成这项工作,请确保 python 脚本直接将信息传递给您的应用程序,或者您必须实现 Cross Origin Ressource Sharing。 为此,您必须在 python(端口 8080)脚本的响应中添加一个标头,其中包含以下内容

Access-Control-Allow-Origin: localhost:XXXX //用你的应用程序端口替换 XXXX

编辑: 如果您需要知道如何激活 COR,请查看 stackoverflow 上的此线程: PY Bottle enable COR

【讨论】:

  • 非常感谢@gulty,bottle 正在端口 8080 上运行,我只是没有返回模板,而是重新调整了一个 json 数组。我已经编辑了我的问题。我并没有真正尝试访问任何其他端口。
  • 所以如果你不尝试使用不同的端口,那么你的主应用程序(不是瓶子)在 localhost:8080/hello 下运行?那么如何使用非静态网址呢?喜欢 /test 如果你已经打招呼了吗?同样的错误?
  • emmm 我不知道我需要回家试试这些,我会在几个小时内告诉你:) 让我做对了,我应该使用这样的东西:$.ajax( { url:'localhost:8080/hello/test', dataType:'jsonp', crossDomain: 'true', success:function (data) {alert("success");} });
  • 您需要弄清楚您的应用程序主目录是什么。访问您的 javascript 的文件在哪里?如果是 localhost:8080/hello (例如),则不需要创建 jsonp 请求。你甚至不需要带有 localhost 的 ajax url - 你可以使用 url:'/test'。如果您的应用程序没有使用与您的瓶子数据库应用程序相同的域/端口,您必须激活 COR。我刚刚为您找到了一个链接(请参阅编辑)
  • 就是这样,终于成功了。非常感谢您的帮助。你是一个救生员:)
猜你喜欢
  • 2019-04-08
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
相关资源
最近更新 更多