0

我正在使用 CakePHP 1.2.4,并且我在搜索表单中有两个搜索过滤器,它们以这种方式交互:一个下拉列表填充了国家,另一个 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调用的问题,而是如何在刷新后保留下拉列表值及其选择的值(也编辑了标题)

4

1 回答 1

0

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

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

于 2012-07-17T21:42:26.243 回答