0

私は CakePHP 1.2.4 を使用しており、検索フォームにこのように相互作用する 2 つの検索フィルターがあります。ドロップダウンリストには国が入力され、別の ddl には最初の ddl で選択された国の州が入力されます。

これはajaxで行われます

ページが検索フォームで使用されているときにページが更新されたときに ajax 関数を呼び出す必要があります。

これらのドロップダウン リストは、他の種類のビューでも使用されます。たとえば、edit_address.ctp ページでは、ページを開くときに選択された値は、データベースに保存された値になります。

ただし、edit_address.ctp ページでは、ユーザーが国を手動で変更しない限り州を更新したくないため、更新 (またはオンロード) 時に値を更新する必要はありません。

    $('.ajaxSelect').each(function(){
    $(this).change(function(){
        updateSelect($(this));
    });
    //call function on load only for filters in a search form
    if($(this).closest('.frmSearch').length > 0){
        if($(".ajaxSelect option:selected").text() != ""){
            $(this).change(updateSelect($(this))).change();
        }
    }
})

この関数では正常に動作しますが、edit_address.ctp で、ユーザーが国を (保存せずに) 変更してページを更新すると、州はデフォルトの国と一致するようにリセットされますが、選択された国は更新前に選択されたままになるため、州は国と一致しなくなりました。

国フィルターの例を次に示します。

<select id="AddressCountryId" class="ajaxSelect" linked="AddressRegionId" method="getRegion" name="data[Address][country_id]">

そして状態フィルター

<select id="AddressRegionId" name="data[Address][region_id]">

更新時に var_dump($_POST) が空であるため、アドレスコントローラーでこの方法で選択した値にアクセスできません。

私が考えることができるもう1つのことは、上記のajax関数で、モデルからメソッドを呼び出して、ビューで選択された状態が選択された国と一致するかどうかを確認することです。それは正しい方法ですか?モデル関数にアクセスするには、ajax コントローラーに新しい関数を作成する必要がありますか?

要するに、選択した値がデータベースから取得されない場合はいつでも(ユーザーが別の国を手動で選択しない限り)州リストを ajax で更新する必要があります。

私が見逃しているいくつかの重要な概念があるかもしれません。紛らわしいかもしれないので、遠慮なく精度を聞いてください、ありがとう


編集:これはいつajax呼び出しを行うかどうかの問題ではなく、ドロップダウンリストの値とそれらの選択された値を更新後に保持する方法(タイトルも編集)の問題ではないかと思います

4

1 に答える 1

0

HTTPはステートレスです。したがって、ブラウザを更新すると、それは新しいHTTPリクエストであり、ドロップダウンで選択されたアイテムが何であるかがわかりません。

考えられる回避策の1つは、状態を永続的なメディアに保存することです。セッション変数、データベースはあなたが考えることができる2つのオプションです。

于 2012-07-17T21:42:26.243 に答える