1

私のシナリオはこれです-ユーザーがホームページを要求すると、ページのjavascriptコードが同じサーバーに対してajax GETリクエストを実行してオブジェクトを取得します。

サーバーは、ホームページを jade テンプレートとして保持します。

したがって、現時点では、ホームページをロードするのに 2 回の往復が必要です。

  1. ホームページを取得する
  2. JSON オブジェクトを取得する

私はそれで問題ありませんが、好奇心からです - 後で要求されたオブジェクトをホームページの最初の GET 要求に組み込むためのオプションは何ですか?

1 つの方法は、非表示の html 要素を持つことです。この内側の HTML は、オブジェクトの文字列表現になります。少し厄介ですが、ホームページの jade テンプレートがとにかく前処理されていることを考えると、サーバー側ではかなり単純です。

他のオプションは何ですか?

この1回の往復を節約することは実際には問題ではないことを私は完全に認識していることに注意してください. テクニックに興味があるだけです。

4

3 に答える 3

0

最初の GET リクエストは、そのドキュメントだけを取得します。ページの下部に追加のドキュメントをスクリプトとして定義してロードすることができるため、初期ロードのために XHR を実行する必要はありません。

例えば:

GET /index.html
//At the bottom you have a <script src="/somedata.js"></script>

GET /somedata.js
//here you define you var myObj = {}.... as suggested by bfavertto

使用しているサーバー側のテクノロジーに応じて、これはたとえば MVC3 である可能性があります

public partial class SomeDataController : BaseController
{
    public virtual ContentResult SomeData()
    {
        var someObject = //GET the JSON
        return Content("var myObj = " + someObject, "application/javascript");
    }
}
于 2012-11-08T12:17:36.517 に答える
0

HTML の隠しタグ内に Json データを埋め込むことができます。実行時に、JavaScript は Json 呼び出しを行う (または、このデータが利用できない場合は呼び出しを行う) 代わりに、この隠しタグからデータを読み取ります。

<!--the contents of this div will be filled at server side with a Json string-->
<div id="my-json-data" style="display:hidden">[...json data...]</div>

ドキュメントの準備ができている場合:

var jsonStr = document.getElementById( "my-json-data" ).innerHTML;
于 2012-11-08T13:34:07.363 に答える
0

もう 1 つのオプションは、常に JSON オブジェクトを返すことです。この場合、ホームページの HTML は、このオブジェクトのプロパティの値になります。ただし、これにはおそらくクライアント側のロジックにいくつかの変更が必要になるでしょう。

もう 1 つのオプション: JSON 文字列を含む非表示の HTML 入力/テキストエリアの代わりに、オブジェクト リテラルが変数として宣言されるスクリプト ブロックをホームページ コードに含めることができます。このようなもの:

<script>
var myObj = ... // Your JSON string here.
                // myObj will be an object literal, and you won't need
                // to parse the JSON.
</script>
于 2012-11-08T12:12:20.137 に答える