Я поставил вопрос раньше и не имел большой удачи, я надеюсь очистить содержимое второго раскрывающегося списка и повторно заполнить раскрывающийся список, в зависимости от значения, которое находится в первом выпадающем списке.
У меня есть следующие поля выбора, как показано ниже:
<select name = "car" id="Cars" onchange="myFunction(this)"> <option value="0">Toyota</option> <option value="1">Audi</option> <option value="2">Suzuki</option> </select>
Под этим раскрывающимся списком у меня также есть еще один снимок для моделей:
<select id="emptyDropdown"> <option value="0">R8</option> <option value="1">Quattro</option> <option value="2">A6 hatchback</option> </select>
onchange Я хочу очистить второй выпадающий список и заполнить его моделями, связанными с маркой автомобиля. НАПРИМЕР.
Audi - A8, A6, A4 etc. Suzuki - Swift, Panda etc. <script> 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){ ????????? } }); } </script>
Затем я имею следующую функцию PHP, как показано ниже (я использую codeigniter) – эта функция использует идентификатор автомобиля и возвращает список всех моделей, как показано ниже:
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, чтобы заполнить раскрывающийся список с идентификатором = «emptyDropdown». Массив, сгенерированный в PHP, имеет следующую структуру:
Array ( [0] => Array ( [ModelName] => R8 V6 Twin Turbo [ModelID] => 19 ) [1] => Array ( [ModelName] => A6 Hatchback [ModelID] => 107 ) )
Чтобы прояснить вопрос – как я возьму каждый элемент в массиве и поместил бы это как новый параметр в раскрывающийся список? есть способ вернуть массив в javscript, а затем повторно заселить в методе успеха вызова ajax?
Любая помощь будет высоко оценена, большое спасибо заранее
Этот ответ содержит необходимые изменения для вашего кода.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ. Не видя точной установки, имейте в виду, что в вашей установке может быть множество факторов, которые не могут работать «как есть». Я не знаю, как настроены ваши маршруты, или если вы используете 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-call, чтобы иметь обратный вызов успеха, который получает данные и добавляет его в раскрывающийся список:
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('<option value="' + d.ModelID + '">' + d.ModelName + '</option>'); }); } }); }
Опять же – это строительные блоки. Используйте консоль браузера или инструмент, такой как Firebug, для просмотра запроса AJAX и возвращаемых данных, чтобы вы могли соответствующим образом изменить. Удачи!