3

Firefox v15.0.1のローカルサイトで要求しているURIの以下の例がありますが、簡潔にするためにホスト名を削除しました。

/search?cat=ngb%26b

いくつかのページングリンクは、次のようなhrefで結果のページに表示されます

?p=2&cat=ngb%26b

https://github.com/browserstate/History.js/を使用しているクリックイベントで以下の履歴リクエストを実行します。これは、私が知っている状態からの状態変化のためにHTML5履歴を使用します。

History.getState().url;

url History.getState()。urlは私に以下を与えます、これはクリックイベントで非同期関数に渡されます:

/search?cat=ngb&b&p=2

そして、履歴はブラウザのURIをこれに合わせて調整しています

/search?cat=ngb&b=undefined&p=2

「cat」パラメータが正しくないため、非同期アクションが失敗します。

getState()。urlの結果全体をURLエンコードすることはできません。これは、正しくないためです。

このような状況に直面したときにやらなければならないことが欠けていることはありますか?

どんな助けでもいただければ幸いです。ありがとう。

更新: 私は現在これをデバッグしていて、getState()関数が返すオブジェクトを調べています。正しくエンコードされたパラメーターを含む「data」オブジェクトプロパティがあります。

スピンして、ajaxリクエストを行う関数に渡すURLに追加することもできますが(.urlプロパティを渡す代わりに)、Historyがハッシュを処理することを意図している場合、これは良い考えとは思えません。 HTML4のURLフォールバック。

4

1 に答える 1

1

ここで私自身の質問に答えます。

ここで2つの問題が発生しました。1つはHistory.jsで、もう1つは間違った状況でJQuery.paramを使用することです。これは、URLで使用できるようにするために、指定したものをすべてエンコードするためです。

History.jsプラグインのいくつかの問題を修正するために、この便利なブランチ https://github.com/hrunting/history.js/tree/encoded-urisを見つけました。 これはまだオープンプルリクエストですが、残念ながら非常に役立ちました。変更されたファイルを再バンドルし、必要に応じてそれらを縮小する必要があります。

それが変更されると、$。param()を使用して、クエリ文字列の値に基づいて構築された状態オブジェクトに値を追加するというコードの問題も発生しました。明らかに、「ng%26b」値はすでにエンコードされており、paramは%をエンコードしていたため、「ng%2526」になります。

とにかく、これが将来誰かを助けるかもしれないことを願っています。

ありがとう

于 2012-10-04T19:55:31.020 に答える