使用JQUERY,AJAX和PHP填充选择框

我之前发布了一个问题并没有太多运气,我希望清除第二个下拉列表的内容并重新填充下拉列表,具体取决于第一个下拉列表中的值。

我有以下选择框,如下所示:

 Toyota Audi Suzuki  

在这个下拉列表下方,我还有另一个下拉模型:

   R8 Quattro A6 hatchback  

onchange我想清除第二个下拉列表并用与汽车品牌相关的模型填充它。 例如。

 Audi - A8, A6, A4 etc. Suzuki - Swift, Panda etc.  function myFunction(obj) { $('#emptyDropdown').empty() var dropDown = document.getElementById("carId"); var carId = dropDown.options[dropDown.selectedIndex].value; $.ajax({ type: "POST", url: "/project/main/getcars", data: { 'carId': carId }, success: function(msg){ ????????? } }); }  

然后我有以下PHP函数,如下所示(我正在使用codeigniter) – 此函数使用Car ID并返回所有模型的列表,如下所示:

 public function getCars(){ $this->load->model('car_model'); $this->form_validation->set_rules('carId', 'carId', 'trim|xss_clean'); if($this->form_validation->run()){ $carId = $this->input->post('carId'); $carModels = $this->user_management_model->getCarModels($carId); } else { echo "error"; } } 

然后我不知道如何返回PHP中生成的数组中的每个元素,以重新填充ID =“emptyDropdown”的下拉列表。在PHP中生成的数组具有以下结构:

 Array ( [0] => Array ( [ModelName] => R8 V6 Twin Turbo [ModelID] => 19 ) [1] => Array ( [ModelName] => A6 Hatchback [ModelID] => 107 ) ) 

为了澄清这个问题 – 我如何获取数组中的每个元素并将其作为下拉列表中的新选项? 有没有办法将数组返回到javscript,然后在ajax调用的success方法中重新填充?

任何帮助将不胜感激,非常感谢提前

此答案提供了对代码的必要修改。

免责声明:如果没有看到确切的安装,请注意可能有多种因素导致这种情况无法在您的安装中“按原样”运行。 我不知道您的路由是如何设置的,或者您是否使用Firebug或其他控制台来观看ajax调用,但这应该为您提供构建块:

首先,更改您的php以将数组输出为json编码的字符串:

 public function getCars(){ $this->load->model('car_model'); $this->form_validation->set_rules('carId', 'carId', 'trim|xss_clean'); if($this->form_validation->run()){ $carId = $this->input->post('carId'); $carModels = $this->user_management_model->getCarModels($carId); // Add below to output the json for your javascript to pick up. echo json_encode($carModels); // a die here helps ensure a clean ajax call die(); } else { echo "error"; } } 

然后,修改脚本ajax调用以获得成功回调,该回调获取数据并将其添加到您的下拉列表中:

 function myFunction(obj) { $('#emptyDropdown').empty() var dropDown = document.getElementById("carId"); var carId = dropDown.options[dropDown.selectedIndex].value; $.ajax({ type: "POST", url: "/project/main/getcars", data: { 'carId': carId }, success: function(data){ // Parse the returned json data var opts = $.parseJSON(data); // Use jQuery's each to iterate over the opts value $.each(opts, function(i, d) { // You will need to alter the below to get the right values from your json object. Guessing that d.id / d.modelName are columns in your carModels data $('#emptyDropdown').append(''); }); } }); } 

再次 – 这些是构建块。 使用浏览器控制台或Firebug等工具来监视AJAX请求和返回的数据,以便您可以根据需要进行修改。 祝好运!