0

アプリの状態が URL パラメーターの一部として保存される JavaScript シングル ページ アプリ (backbone.js を使用) があります。このウェブページにはたくさんのチェックボックスがあります。

したがって、ユーザーが次のような URL にアクセスした場合http://my-app.org/project/#app/load?checkboxID[4053]=1&checkboxID[4054]=1&checkboxID[4055]=1&checkboxID[4056]=1&checkboxID[4057]=1&checkboxID[4058]=1&checkboxID[4059]=1...goes on and on, various further params...

次に、指定されたチェックボックスが選択された状態で、ページが (Backbone.Router を使用して) それ自体を構成します。URLのハッシュ#appに注目してください。これは、パラメーターが JavaScript アプリによって処理されることを意味します。

問題は、アプリが以前に考えていたよりもはるかに多くのパラメーターを持っていることです。したがって、すべてのチェックボックスを有効にすると、約 98.000 文字の長さの URL が得られますが、この回答によれば、最大で 2.000 文字しかありません。おっとっと :-(

これを処理するためのアドバイスは何ですか? JavaScriptでURL文字列を「短縮」/「圧縮」するスマートな方法(gzip + URL文字列のbase64エンコーディングなど)があると思いましたが、それでもURLを2000文字未満に短縮することはできません.

4

2 に答える 2

2

URL 経由で App の状態を渡すことは良い習慣ではないと思います。状態を保存するために、適切に名前空間が付けられたオブジェクトを持つことができます。

var myApp = myApp || {};
myApp.state = myApp.state || {};

URL を使用して状態を保持する場合は、このオブジェクトに入力して、これを使用するだけです。

PS:圧縮のようなものを探していて、コードをあまり変更したくないので、この答えはあなたを喜ばせないかもしれません。まだあなたへの提案です。

于 2013-03-22T10:58:06.160 に答える
1

パラメータを個々のアイテムではなく配列として読み取るようにURLを再構成できませんでしたか

checkboxId=[4053, 4054, 4054 ...]

これにより、いくつかの文字が節約され、上記の配列内の id をループすることができます。

「40」が一般的な文字である場合、または「4」が一般的な場合、スクリプトを実行するときに値からこれを削除して先頭に追加することもできますか?

于 2013-03-22T10:49:04.987 に答える