1

クライアント側のJavaScriptにアクセスできる変数(最終的にはデータベースから選択されたより複雑なjsonに置き換えられる)を作成しようとしています。ページがajax呼び出しの代わりにレンダリングされ、ejsのようなテンプレートを介してレンダリングされないときにロードしたかった(データをコンボボックスのextjsストアに渡したい)。だから私は私がレンダリングする標準的な応答を持っています:

function (req, res) {
  res.render('index.html', {foo: ['a','b']});
}

fooにアクセスしたい空白のhtmlページ:

<!DOCTYPE html>
<html>
<head>
<script type=text/javascript>
console.log(foo);
</script>
</head>
<body>
</body>
</html>

何か案は?res.send() を介して html ページ全体を作成することを考えました (上記の例よりもいくつかあります)。

4

2 に答える 2

1

EJSでは以下が機能するはずです

<script type=text/javascript>
  console.log( <%= foo %>);
</script>

関心の分離を破り、JavaScriptを強制的にオンにするため、JavaScriptを動的に生成することはお勧めしません。

編集:

上記はアレイではうまく機能しないことがわかりました。したがって、データをセマンティックHTMLでエンコードするだけです。次に、JavaScriptで拡張します。JavaScriptがデータを取得する必要がある場合は、Cookieなどのより適切な場所にデータを保存するか、ajaxを介してデータを取得します。

于 2011-06-12T21:43:01.893 に答える
1

上記の質問と同じ配列fooを想定すると、これを行う方法がいくつかあります。

これは、EJS フィルターを使用して配列リテラルを記述します。

<script type="text/javascript">
var foo = ['<%=: foo | join:"', '" %>'];
</script>

これは JSON としてエンコードされ、後でクライアント側の JavaScript によって解析されます。

<script type="text/javascript">
// note the "-" instead of "=" on the opening tag; it avoids escaping HTML entities
var fooJSON = '<%-JSON.stringify(foo)%>';
</script>

IIRC、ExtJS は JSON をそのままデータとして扱うことができます。そうでない場合は、まず JSON パーサーを使用してから、ローカル変数を渡すことができます。ExtJS を使用していない場合は、これを使用してクライアントで解析できます: https://github.com/douglascrockford/JSON-js

JSON としてエンコードすることを選択した場合は、後で AJAX に切り替えてデータを取得することも容易になります。場合によっては、それが有利になります。ページは、データを読み込んでいる要素の上にビジー アイコンとともに、いくつかのデータを読み込んで表示できます。

これは、元のリクエストにすべてのデータを含めることに本質的に問題があると言っているわけではありません。JSON に固執することで、後で柔軟に選択できるようになるだけです。

于 2011-06-13T03:58:20.723 に答える