0

多くの場合、Web ページの Javascript は、サーバーで認識されている変数にアクセスできる必要があります。たとえば、ユーザーのユーザー名です。不必要に複雑さが増し、ページのヒット数も増えるため、JSON/XML リクエストを作成したくないとします。html/Javascript と一緒にデータを送信したいと考えています。

データを送信する 1 つの方法は、Javascript にデータを挿入することです。

var x={{username}};

もう 1 つのアイデアは、head にメタ項目を作成し、そこにデータを格納してから、jQuery (または同等のもの) を使用してそれを取得することです。

これらの方法のどちらかが他の方法よりも望ましいですか、それとも考慮すべき他の方法はありますか?

4

4 に答える 4

1

私の経験では、アカウントやユーザー権限などを持つサイトの静的/事前作成されたHTMLページに依存することはめったにないため、質問は少し複雑だと思います。

通常、このようなサイト/アプリケーションは、ASP、JSP、PHPなどの「サーバーページ」テクノロジーに依存しています(またはAJAXリクエストを介してこれらすべてを管理します)。これにより、次のようなタグ/サーバーコードを記述できます<%=request.getAttribute("userName")%>。これは、サーバーによってコンパイル/解釈されると、ページ内の意図した場所にユーザー名が挿入されます。

何らかの理由で、アプリケーションには当てはまらないと主張し、純粋な事前作成または静的HTMLをユーザーに配信する場合、実際には次のいずれかを実行する必要があります。

1.ユーザー名を取得するAJAXリクエスト

私はあなたの議論が

それは不必要に複雑さを増し、またページヒットの数を増やすでしょう

有効なものではありません。テクノロジーの使用の正確さは、(おそらく存在しない)パフォーマンスの向上よりも優先されるはずです。逆に、複雑さが増すにつれて、「ユーザー」のロギングをモジュールに部分的に分離して、他の場所で再利用できることもわかりません。

2. JavaScriptを挿入します(またはメタタグを使用します)

そしてこれは私はあなたがそれをどのように行い、その後あなたのページを維持するのか完全にはわかりません...

于 2011-10-31T06:06:31.553 に答える
1

これらの方法のどちらかが他の方法よりも好ましいですか、それとも考慮すべき他の方法はありますか?

正解は 1 つではないと思いますし、確かにこの件に関して矛盾した意見をたくさん聞いたことがありますが、あなたが言及した 2 つの方法から選択すると、JavaScript に値を挿入する方が簡単だと思います。

しかし、他の提案を求めたので、2 つのアイデアを組み合わせることができます。メタ アイテムの代わりに、サーバー側のコードは に 1 つの<script>要素を挿入するだけ<head>で、変数にデータを格納することができます。他のスクリプト (複数のソース ファイル内のスクリプトを含む)。多くのグローバルを避けるために、すべてのデータを単一のオブジェクトに貼り付けることができます。

<html>
<head>
<script>
   var dataFromServer = { /* all your server data here */};
</script>
<script type="text/javascript" src="somelibrarycript.js"></script> 
<script type="text/javascript" src="someotherscript.js"></script>
<script>
   if (dataFromServer.someProperty) {
      // someProperty provided above so do something with it...
   }
</script>
</head>
etc...

このアプローチには、サーバー側のコードが基本的に JSON (ページ ソースに直接含まれている場合はオブジェクト リテラルになる) を生成するだけであるという追加の利点があるため、後で Ajax の使用を開始することを決定した場合は、すでにほとんどそこにいることになります。

于 2011-10-31T07:40:03.690 に答える
1

情報を含む適切な名前のグローバルオブジェクトを宣言する要素をヘッドに配置するだけです。何かのようなもの :

<script type="text/javascript" >
    this.blah = this.blah || {};
    this.blah.userinfo = this.blah.userinfo || {};

    this.blah.userinfo = {
        "username" : "UserName42"
        "gender" : "Male"
    };
<script>

上の 2 行は、グローバル オブジェクトを初期化するだけです。これはグローバルなので、"blah" を使用して名前空間を指定します。

于 2011-10-31T05:57:22.550 に答える
1

あなたが提案していることはまったく問題ありません。たとえば、CoffeeScript、Underscore.js、および Backbone.js の作成者である Jeremy Ashkenas は、Backbone ドキュメントでまったく同じことを行うことを提案しています。

<script>
  Accounts.reset(<%= @accounts.to_json %>);
  Projects.reset(<%= @projects.to_json(:collaborators => true) %>);
</script>
于 2011-10-31T06:15:06.477 に答える