我是否可以动态获取<;的值;选项>;并将其传递给PHP而不使用AJAX?

我是否可以动态获取<;的值;选项>;并将其传递给PHP而不使用AJAX?,php,jquery,Php,Jquery,我有两个一个是类别,第二个是子类别 这是类别的第一个 <select name="category" size="10"> <?php foreach($categories->fetch(array('table' => 'categories')) as $category) { ?> <option value="<?php echo $category['id']; ?>"><?php echo $

我有两个
一个是类别,第二个是子类别

这是类别的第一个

<select name="category" size="10">
    <?php foreach($categories->fetch(array('table' => 'categories')) as $category) { ?>
        <option value="<?php echo $category['id']; ?>"><?php echo $category['name']; ?></option>
    <?php } ?>
</select>

现在,第二个
即子类别最初应该隐藏,当用户根据值单击类别
时,它应该填充子类别中的值

一种方法是通过AJAX,将categoryId作为POST请求传递,并将HTML作为响应

但是,我想知道是否还有其他选择,以便它自动将categoryId值传递给PHP,并取消隐藏第二个
这里是第二个
的代码


这里我只需要动态填充$categoryId。有没有办法做到这一点


谢谢你。

不,没有办法按照你的建议去做。PHP只在服务器上运行,因此在客户端呈现页面时,PHP已经运行

您最好的选择是您已经建议的,在第一个select更改后运行一些AJAX,将category ID发送回服务器,并检索构建第二个select所需的内容


你不想这样做有什么原因吗

不,没有办法按照你的建议去做。PHP只在服务器上运行,因此在客户端呈现页面时,PHP已经运行

您最好的选择是您已经建议的,在第一个select更改后运行一些AJAX,将category ID发送回服务器,并检索构建第二个select所需的内容


你不想这样做有什么原因吗

Sukumar可能已经提出了最好、最直观的解决方案,使数据看起来像是动态加载给用户的


另一种选择是在选择框更改时提交表单。表单提交后,PHP将从POST数组中提取ID,然后重新填充子类别选择框。如果用户没有启用JavaScript,这通常被用作后备方案。

Sukumar可能已经建议了最好、最直观的解决方案,使其看起来像是动态地向用户加载数据


另一种选择是在选择框更改时提交表单。表单提交后,PHP将从POST数组中提取ID,然后重新填充子类别选择框。在用户未启用JavaScript的情况下,这通常用作回退。

从结构上讲,有三种选择可以解决此问题:

  • 如jbruno所述,当用户选择时,使用ajax调用获取所需的数据
  • 将整个页面提交给服务器,让您的PHP看到新选择的选项,并在返回的页面中填写新需要的数据。这将导致页面刷新,因此不如选项1理想
  • 使用javascript数据结构中的所有可能数据预填充页面,这样您就可以使用javascript在本地数据结构中查找所需的类别ID,修改页面,并且不必为了更新页面而与服务器交谈
  • 在我看来,如果本地查找所需的数据集不太大(比如100k以下),并且在服务器上收集所有数据以包含在原始页面中也不太昂贵,并且数据没有实时更改,或者在页面加载时具有数据是可以的,那么选项3)是最理想的

    如果方案3)因任何原因不可行,则方案1)是次优方案。选项2)不是很好的用户体验,因此只有当您真的无法实现选项1)或3)时,它才应该是最后的选择

    您更具体地询问了选项3。我还不太明白你需要的全部数据是什么样子的。如果您实际上只有四种数据类型,即
    住宅小区
    住宅公寓
    办公空间
    展厅
    ,则您可以将它们设为对象上的四个键,并以这种方式存储数据:

    var data = {
        "residential_plot": 1,
        "residential_apartment": 2,
        "office_space": 3,
        "showroom": 4
    };
    
    1、2、3和4就是您想要为该类型存储的任何数据。它可以是数字、字符串、数据数组、其他数据对象等等

    要访问此文件,请执行以下操作:

    var id = data.residential_plot;
    
    var id = data.residential.residential_plot;
    
    var category = "residential";
    var catType = "residential_plot";
    var id = data[category][catType];
    

    如果要存储类别和子类别的概念,则需要额外级别的对象:

    var data = {
        "residential": {"residential_plot": 1, "residential_apartment": 2}, 
        "commercial": {"office_space": 3, "showroom": 4}
    };
    
    然后,您可以这样访问它:

    var id = data.residential_plot;
    
    var id = data.residential.residential_plot;
    
    var category = "residential";
    var catType = "residential_plot";
    var id = data[category][catType];
    
    或者像这样:

    var id = data.residential_plot;
    
    var id = data.residential.residential_plot;
    
    var category = "residential";
    var catType = "residential_plot";
    var id = data[category][catType];
    

    从结构上讲,解决这一问题有三种选择:

  • 如jbruno所述,当用户选择时,使用ajax调用获取所需的数据
  • 将整个页面提交给服务器,让您的PHP看到新选择的选项,并在返回的页面中填写新需要的数据。这将导致页面刷新,因此不如选项1理想
  • 使用javascript数据结构中的所有可能数据预填充页面,这样您就可以使用javascript在本地数据结构中查找所需的类别ID,修改页面,并且不必为了更新页面而与服务器交谈
  • 在我看来,如果本地查找所需的数据集不太大(比如100k以下),并且在服务器上收集所有数据以包含在原始页面中也不太昂贵,并且数据没有实时更改,或者在页面加载时具有数据是可以的,那么选项3)是最理想的

    如果方案3)因任何原因不可行,则方案1)是次优方案。选项2)不是很好的用户体验,因此只有当您真的无法实现选项1)或3)时,它才应该是最后的选择

    您更具体地询问了选项3。我还不太明白你需要的全部数据是什么样子的。如果你真的