动态下拉列表使用ajax,sql和php

我有一个运作良好的代码。 它会根据前面的列表填充下拉列表,但是存在问题。 在字段的html表单中,它显示“id”,它是一个数值而不是“name”。 有人可以告诉我它如何显示“名称”而不是值。 实际问题是,当它在sql数据库中保存数据时,它存储国家或州或城市的相应“id”而不是其“名称”。

这是我正在使用的代码。 我试过更改ajax.php echo "$enity_name";的最后一行echo "$enity_name"; echo "$enity_name"; 但是动态下拉列表不起作用,因为它们依赖于“id”。 非常感谢您的帮助。

ajax.php

 db_connect(); // Initiate Database connection $this->process_data(); } /* * Connect to database */ private function db_connect(){ $this->database = mysql_connect(self::DB_HOST,self::DB_USER,self::DB_PASSWORD); if($this->database){ $db = mysql_select_db(self::DB_NAME,$this->database); } else { echo mysql_error();die; } } private function process_data(){ $this->_index = ($_REQUEST['index'])?$_REQUEST['index']:NULL; $id = ($_REQUEST['id'])?$_REQUEST['id']:NULL; switch($this->_index){ case 'country': $this->_query = "SELECT * FROM countries"; $this->_fields = array('id','country_name'); break; case 'state': $this->_query = "SELECT * FROM states WHERE country_id=$id"; $this->_fields = array('id','state_name'); break; case 'city': $this->_query = "SELECT * FROM cities WHERE state_id=$id"; $this->_fields = array('id','city_name'); break; default: break; } $this->show_result(); } public function show_result(){ echo 'Select '.$this->_index.''; $query = mysql_query($this->_query); while($result = mysql_fetch_array($query)){ $entity_id = $result[$this->_fields[0]]; $enity_name = $result[$this->_fields[1]]; echo "$enity_name"; } } } $obj = new AJAX; ?> 

的index.html

   Country State City Dependent Dropdown using Ajax   $(document).ready(function(){ load_options('','country'); }); function load_options(id,index){ $("#loading").show(); if(index=="state"){ $("#city").html('Select city'); } $.ajax({ url: "ajax.php?index="+index+"&id="+id, complete: function(){$("#loading").hide();}, success: function(data) { $("#"+index).html(data); } }) }    

Country,State,City dynamic dependent dropdown using Ajax and Jquery

Select country     Select state     Select City

你可以让脚本做你想做的事情

  1. 将id 显示为数据属性。 – > Ajax->show_result()
  2. 在ajax调用中将该属性用于id参数。 – > load_options()
  3. 将整个

对于带有cahages的ajax查询, this.value是错误的,因为它是一个名称,但是this仍然具有id作为数据属性。

  

由于id参数是表单中的选项元素,我们需要进行补偿以获得正确的id。

 function load_options(id,index){ ... that = $(id).find(":selected"); id = that.data('realid'); $.ajax({ url: "ajax.php?index="+index+"&id="+id, ... 

让value属性保存名称,但保留id。

 public function show_result(){ ... while ($result = mysql_fetch_array($query)){ ... printf( '', $entity_id, $enity_name, $enity_name ); 

这应该回答您的问题,并根据表单的提交和存储方式,它可以解决您的问题。 然而我对此表示怀疑,因为你忽略了向我们展示的那部分很可能会期待国家和城市的身份,而不是他们的名字。

我的英语不好,所以我会写一些我从你那里得到的东西。

 1: You want to get a dropdown list depend on the index 2: You want to shown selected options depend on the id 

首先,你的代码很糟糕。 php代码只是试图获取你需要的数据,为什么你混合了html?

让我们尝试解决第一个问题,获取下拉列表。 你应该让php代码获取你需要的数据,所以你最好修改你的php函数show_result,我想这样写:

 public function show_result(){ $tmpData = array(); $i = 0; $query = mysql_query($this->_query); while($result = mysql_fetch_array($query)){ $id = $result[$this->_fields[0]]; $enity_name = $result[$this->_fields[1]]; $tmpData[$i]['id'] = $id; $tmpData[$i]['name'] = $enity_name; } return $tmpData; //here it saves data which you want to shown in drop down list } 

然后在文件ajax.php的末尾,

  $obj = new AJAX; echo json_encode($obj->show_result()); 

然后在js脚本中,尝试解析从ajax.php获取的数据,它是一个json字符串,它包含id和名称。 在此处生成下拉选择器的选项。

  function load_options(id,index){ $("#loading").show(); if(index=="state"){ $("#city").html(''); } $.ajax({ url: "ajax.php?index="+index, //do not pass id complete: function(){$("#loading").hide();}, success: function(data) { var jsonObj = eval('('+data+')'); var selected = false; var options = ''; for(jsonObj in eachData){ if(eachData.id == id) selected = true; // shown selected if it's the right option you want to see options += ''; selected = false; } $("#"+index).html(options); } }) } 

然后你会得到一个下拉列表,如你所愿。 我只是编写这些代码来指导你,我没有调试和测试它们,只是尝试方法:从php获取数据,在页面中显示为html。

这就是全部。 再次抱歉我可怕的英语(我说中文很好:))