1

最初に言いたいのは、私は Web 開発に不慣れで、特定の科学用語がいくつか欠けているということです。

バックエンドには Pyramids を、フロントエンドには Chameleon を使用しています。これで、いくつかの ajax リクエストを送信するメイン ページができました。応答を受信した後、DOM 操作のコールバックを受け取りました。AFAIK dom 操作はブラウザによって保存されないため、ユーザーは戻るボタンを押すことができません。しかし、メカニズムはどのように呼び出されますか?または、どのように ajax 応答と一意の URL を取得できますか? URL は、現在の URL + パラメータまたはパラメータの sha1 以外の何かにすることができます。

サーバー側で特定のハンドラーを実装する必要がありますか?それともクライアントで実行できますか?

Google の助けを借りて、ブラウザーで dom 操作の状態を保持できないことがわかりました。したがって、すべてのリクエストには一意のURLが必要です->したがって、これはサーバー側で行う必要があると思いますが、前述のように、私は新しいです。

ありがとう :)

編集: サイト - 私がプログラミングしている - は、「億万長者になりたい人」のように想像できます。いくつかのラウンドがあり、各ラウンドでユーザーはいくつかの回答から選択できます。すべてのラウンドは最後のラウンドに依存します。これは私の博士号の一部であり、非常に巨大であるため、コードを追加するのは困難です:\

4

1 に答える 1

2

(まず、Chameleon は「フロント エンド」では実行されません。これは、入力として文字列 (テンプレート) と python dict (テンプレート パラメーター) を受け取り、別の文字列を出力として返す Python テンプレート ライブラリです。クライアントに送信されるとき、その出力はブラウザによって HTML ページとして解釈され、タグが埋め込まれている可能性があり<script>ます。これらのタグ内の JavaScript がブラウザによって実行されます。これがクライアントで実行されます。)

さて、質問に移ります :) ブラウザのアドレス文字列に表示される URL を JavaScript から変更できます。これにより、ブラウザの履歴に新しいエントリが挿入されます。また、アプリケーションがその新しい URL の情報に基づいて状態を復元できるようにする必要があります。そうしないと、誰かが URL をブックマークしたり、新しいタブで開いたり、単にアプリケーションをリロードしたりすると、問題が発生します。

ブラウザの履歴を操作する歴史的に古い方法の 1 つは、window.location.hashを介して URL のハッシュ部分を変更することです。最小限の例を次に示します。

<html>

<body>
    <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

    <input id="name-input" type="text" />

    <script>
        // restore the "application state" on page load -
        // if there's a hash in the url we set the text in the input
        if (window.location.hash) {
            $('#name-input').val(window.location.hash.substring(1));
        }

        // whenever the hash changes (user clicked the Back button)
        // we also need to modify the application state
        $(window).on('hashchange', function () {
            $('#name-input').val(window.location.hash.substring(1));
        });             

        // type some text in the input and press Enter. 
        // Observe the URL changing. Try using the Back button.
        $('#name-input').on('change', function () {
            window.location.hash = $(this).val();
        });
    </script>
</body>

</html>

履歴を変更するもう 1 つの最新の方法は、history.pushState()を使用する方法です。これはより強力ですが、サーバー側のサポートが必要になる場合があります (サーバーは、アプリケーションが移行した新しい URL から正しいページを提供できる必要があります)。 to - URL がmysite.com/page1, , のように見え、 to -から移行するためにmysite.com/page2使用する場合、サーバーは両方の URL を処理できる必要があります)。pushState/page1/page2

また、この種の状況 (JSON データの取得、ページのレンダリング、URL の変更) に対処するために特別に構築されたクライアント側フレームワークが世界中に存在することにも注意する必要があります。手動で行う代わりにサイド フレームワークを使用すると、作業が簡素化されます。Backbone.jsは非常に最小限であり、他のフレームワークのように「唯一無二の真の方法」で物事を行う必要がないため、 Backbone.jsを調べることから始めます。

于 2015-08-31T23:19:55.303 に答える