2

そのため、フィルタリングの目的でデータを渡すために ajax リクエストを使用しています。

次に、history.js を使用して、URL を変更し、ブラウザに状態を追加して、戻る、進むなどを可能にします。このようにして、ajax リクエストまたは通常のリクエストでデータをフィルタリングできます。ここまでは順調ですね。

私の問題は、ajaxリクエストを通過するデータに配列があることです:

function updateContent(url, state) {
    $.ajax({
        type: 'GET',
        data: {name: state.filter_name, num: state.filter_number, 
            data: state.filter_data, array: state.filter_array},
        url: url,
        success: function(msg) {
                $('#ajax').html(msg);
        }
    }); 
    
}

これにより、次の URL にリクエストが送信されます。

http: //localhost/Project/Controller/?filter_array%5B%5D=1&filter_array%5B%5D=50&filter_array%5B%5D=70.

そして、このURLを history.pushstate に渡したい

jsenconde を使用して手動で URL を作成すると、URL は若干異なり、次のようになります。

http://localhost/Project/Controller/?filter_array=["1","50","70"]

よりクリーンですが、URL で [] を使用してはならないことをどこかで読みましたが、この方法を使用しても、2 種類の GET URL、ajax URL を取得します。filter_array%5B%5D=1&filter_array%5B%5D=50&filter_array%5B%5D=70.および json url ?filter_array=["1","50","70"].

したがって、1 種類の GET URL だけを取得するソリューションが必要なので、同じ URL を ajax と通常のリクエストに使用できます。

4

2 に答える 2

0

値の配列を渡す標準的な方法は[]、最初の例のように、名前に'sを繰り返し(URLエンコード)渡すことです。

これに準拠するようにURLを生成する必要があります...

filter_array[]=1&filter_array[]=2&filter_array[]=3

もちろん、これはあなたが示したようにエンコードします。

filter_array%5B%5D=1&filter_array%5B%5D=2&filter_array%5B%5D=3

この形式を使用すると、コードの移植性が向上します(たとえば、ASP.Netは、多くのPHPライブラリと同様に、リストへの変換を自動的に実行します)。

この形式でURLを生成できない理由はありますか?

ここでの違いは、1つは標準のフォームエンコーディングを使用し、もう1つはJSONの変換を使用していることです。

于 2012-06-26T00:34:29.043 に答える
0

jQueryは、不正な文字がないようにJSONオブジェクトをエンコードするURLです。次に、javascriptを使用してそのGET変数を取得する場合は、URLからデータをプルし、URLでデコードしてから、JSON.parse()を使用してJavaScriptオブジェクトに戻す必要があります。

http://www.w3schools.com/jsref/jsref_encodeuri.asp

于 2012-06-26T00:34:39.850 に答える