0

JavaScript 関数内で mongodb レコードにアクセスして、Web ページにドキュメントを表示しようとしています。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 ページ内にドキュメントを表示しようとしても、何も起こりません。ただし、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>

関数でJSONオブジェクトの行を逆シリアル化するためにjQueryを使用しようとしました

jQuery.parseJSON(rows);

jQuery.parseJSON({{rows}}); としても。

また、変数を {{!rows}} として可能な限りエスケープしないようにしようとしました。pymongo で mongodb ドキュメントを取得し、ボトルを使用して Web ページに表示するにはどうすればよいですか? 同様の質問が寄せられていることは認識していますが、特定の状況で機能することがわかったものは何も得られないようです.

4

2 に答える 2

1

問題は、json をレンダリングするボトルではなく、document.write().

ブラウザで新しいタブを開き、「about:blank」という URL を指定します。これにより、空白の Web ページが表示されます。次に、右クリックして開発者ツールを開きます。document.write('Stuff');そのコンテキストから実行してみてください。ページへの変更は表示されません。

代わりに試してください:

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

そして違いに注意してください。

もちろん、この効果を実現する方法は他にもたくさんありますが、これは外部 JavaScript ライブラリを必要としない最も簡単な方法です。

于 2013-07-31T19:07:09.827 に答える
0

'src' 属性と JavaScript コードの両方を同じタグに含めることはできません。新しい script タグ内に fillTable 関数を配置します。

于 2013-07-31T15:18:02.657 に答える