0

我正在尝试访问 javascript 函数中的 mongodb 记录以在网页上显示文档。使用带有 pymongo 的 Bottle 框架,我尝试首先将 mongodb 文档编码为 JSON 对象以传递给我的 javascript 函数。

@bottle.route('/view/<_id>', method = 'GET')
def show_invoice(_id):
    client = pymongo.MongoClient("mongodb://localhost")
    db = client.orders
    collection = db.myorders
    from bson.objectid import ObjectId
    result = collection.find_one({'_id': ObjectId(_id)})
    temp = json.dumps(result,default=json_util.default)
    print "temp: " + temp

    return bottle.template('invoice', rows = temp)

当我尝试使用 javascript 函数在我的 HTML 页面中显示文档时,没有任何反应。但是,当我调用变量 rows 时,我试图在它显示的 HTML 正文中作为 {{rows}} 传递。似乎只有 JS 函数不显示任何内容。

    <!DOCTYPE html>
 <html>
  <head>
    <head>
    <title>Invoice Report</title>
    <script type="text/javascript">
    function fillTable()
    {
      var obj = {{rows}};
      document.write(obj);

    }
    </script>
   </head>
  </head>
  <body onload="fillTable()">
     <div class="invoice">
     </div>
     <h4>Rows from body</h4> {{rows}}

  </body>
 </html>

我尝试使用 jQuery 反序列化带有函数的 JSON 对象行

jQuery.parseJSON(rows);

甚至作为 jQuery.parseJSON({{rows}});

我还尝试使变量在任何地方都尽可能地不转义为 {{!rows}} 那么有人看到我做错了什么吗?如何使用 pymongo 获取 mongodb 文档,并使用瓶子将其显示在网页上?我意识到有人问过类似的问题,但我似乎无法找到在我的特定情况下工作的任何东西。

4

2 回答 2

1

问题不在于瓶子渲染您的 json,而在于使用document.write().

在浏览器中打开一个新选项卡,并将其指向 url:'about:blank'。这将为您提供一个空白网页。现在,右键单击并打开您的开发人员工具。尝试document.write('Stuff');从该上下文中运行。您不应该看到对页面的任何更改。

而是尝试:

var body = document.getElementsByTagName("body")[0];
body.innerHTML = "Stuff";

并注意区别。

当然,还有很多其他的方法可以实现这个效果,但这是最简单的,不需要任何外部 javascript 库。

于 2013-07-31T19:07:09.827 回答
0

您不能在同一个标​​记中同时拥有“src”属性和 javascript 代码。将 fillTable 函数放置在新的脚本标记中。

于 2013-07-31T15:18:02.657 回答