У меня есть приложение CodeIgniter MVC.Фильтрация выпадающего меню с ajax и PHP
У меня есть модель под названием город, который имеет метод:
<?php
class Cities_model extends Model{
function Cities_model(){
parent::Model();
}
function get_cities($id = null){
$this->db->select('id, city_name');
if($id != NULL){
$this->db->where('country_id', $id);
}
$query = $this->db->get('cities');
$cities = array();
if($query->result()){
foreach ($query->result() as $city) {
$cities[$city->id] = $city->city_name;
}
return $cities;
}else{
return FALSE;
}
}
...
контроллер:
function Post(){
$this->load->helper('form');
$this->load->model('cities_model');
$this->load->model('country_model');
$this->load->model('field_model');
$data['cities'] = $this->cities_model->get_cities();//optional $id parameter
$data['countries'] = $this->country_model->get_countries();
$data['fields'] = $this->field_model->get_fields(); //subject field
$this->load->view('post_view',$data);
}
Этот метод используется для заполнения содержимого списка. У меня есть аналогичная модель для стран, которая также имеет выпадающий список.
Вы можете видеть, что метод get_cities настроен на принятие country_id. Это будет использоваться для фильтрации результатов, если страна была выбрана.
Мой вопрос: мне нужна помощь при вызове этого метода с использованием Ajax (желательно jQuery). Я новичок в ajax и никогда не делал ничего подобного раньше.
Любая помощь в оценке!
Билли
UPDATE
Я добавил библиотеку Jquery и создали метод в моем контроллере:
function get_cities($country){
header('Content-Type: application/x-json; charset=utf-8');
echo(json_encode(array($this->cities_model->get_cities($country))));
}
вот мой Javascript на мой взгляд:
<script type="text/javascript">
$(document).ready(function(){
$('#country').change(function(){
var country_id = $('#country').val(); // here we are taking country id of the selected one.
$.ajax({
type: "POST",
url: "<?php echo base_url(); ?>home/get_cities/"+country_id,
data: ({country : country_id}),
success: function(cities){
$.each(cities,function(i,city)
{
var opt = $('<option />');
opt.val(city.value);
opt.text(city.text);
$('#cities').append(opt);
});
}
});
});
});
Это ответ json:
[{"2":"Accra"}]
Таким образом, он успешно восстанавливает правильные данные. единственная проблема заключается в добавлении пустых значений/текста в раскрывающийся список. и каждый раз, когда я меняю город, данные добавляются, поэтому, я думаю, мне нужно будет сначала очистить выпадающее меню?
спасибо за ответ. Я не уверен, правильно ли я это делаю.Я обновил свой вопрос с помощью своего нового кода – iamjonesy
также, функция «i» в функции (i, city) никогда не используется – iamjonesy
о, да, есть ошибка: в вашем вызове ajax имеется дубликат country_id info: просто снимите 'data: ({country: country_id}),' вы уже отправляете country_id через url. переменная «i» используется для назначения числа обрабатываемого элемента (0,1,2 ...), это может быть полезно в случае отладки. Я обновляю свой ответ – Dalen