Php 刷新时保留dropdownlist选定值

Php 刷新时保留dropdownlist选定值,php,ajax,drop-down-menu,Php,Ajax,Drop Down Menu,我使用的是CakePHP 1.2.4,在搜索表单中有两个搜索过滤器,它们以这种方式交互:dropdownlist填充国家,另一个ddl填充第一个ddl中选择的国家的州 这是通过ajax完成的 当页面在搜索表单中使用时被刷新时,我需要调用ajax函数,否则状态ddl不会再次填充 这些下拉列表也用于其他类型的视图。例如,在edit_address.ctp页面上,打开页面时选择的值将是保存在数据库中的值 但是,在edit_address.ctp页面上,我不需要在刷新(或onload)时更新值,因为我不

我使用的是CakePHP 1.2.4,在搜索表单中有两个搜索过滤器,它们以这种方式交互:dropdownlist填充国家,另一个ddl填充第一个ddl中选择的国家的州

这是通过ajax完成的

当页面在搜索表单中使用时被刷新时,我需要调用ajax函数,否则状态ddl不会再次填充

这些下拉列表也用于其他类型的视图。例如,在edit_address.ctp页面上,打开页面时选择的值将是保存在数据库中的值

但是,在edit_address.ctp页面上,我不需要在刷新(或onload)时更新值,因为我不想更新状态,除非用户手动更改国家/地区

    $('.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)为空,因此我无法在地址控制器中以这种方式访问选定值

我能想到的另一件事是,在上面的ajax函数中,通过从模型中调用一个方法来检查视图中所选的状态是否与所选的国家匹配。走这条路对吗?我应该在ajax控制器中创建一个新函数来访问模型函数吗

简而言之,只要所选的值不是来自数据库(除非用户手动选择另一个国家),我希望使用ajax更新状态列表(如果有意义的话)

我可能遗漏了一些关键概念。请随意询问精度,因为这可能会让人困惑,谢谢



编辑:我猜这可能不是何时进行ajax调用的问题,而是如何在刷新后保持DropDownList值及其选定值(也编辑标题)

HTTP是无状态的。因此,当您刷新浏览器时,这是一个新的HTTP请求,它不知道下拉列表中的选定项是什么


一种可能的解决方法是将状态存储在某种持久介质中。会话变量、数据库是您可以想到的两个选项

这就是我的问题所在,但我不知道如何解决它。我在大约10个不同的页面中使用这些过滤器,在ajax方法中设置会话变量是否是一个好方法?会话将可访问所有页面,直到用户会话处于活动状态。您可以通过ajax将此筛选条件/或任何数据传递给服务器pge,并在那里设置会话变量。事实上,我还可以在10个页面中使用10个不同的过滤器对,它们之间没有任何连接。我想专门为相应页面保留数据,并在离开页面时擦除会话变量。我使用的ajax方法由所有过滤器调用,并在控制器中调用单个方法,这是我要编辑的方法,而不是ajax函数本身(如果我错了,请纠正我)。非常感谢你的回答!由于我想在用户离开包含筛选器的页面后立即取消设置会话变量,我是应该按照您的建议使用cookies,还是应该在应用程序的每个页面中指定取消设置会话(我最好不要这样做,因为它有数百个页面)?好的,我通过编辑beforeFilter()来实现它应用程序的app_控制器的方法(继承自cakephp核心控制器)!