расширение ответа Alpesh:
у вас должна быть функция контроллера, которая возвращает города, отфильтрованные по стране:
/controller/get_cities/<country>
Я предполагаю, что функция вашего контроллера вернет объект json, выможно получить его, выполнив:
function get_cities($country)
{
header('Content-Type: application/x-json; charset=utf-8');
echo(json_encode(array($this->cities_model->get_cities($country))));
}
, тогда на представлении у вас будет 2 поля выбора:
- один заполнен контурами
- один пустойи чтобы быть заполненным городами, полученными через ajax
сейчас, вам нужно написать что-то вроде того, что сделал Alpesh, чтобы вернуть города выбранной страны;URL будет
url: '/controller/get_cities/'+country_id
, тогда как функция успеха будет выглядеть примерно так:
success: function(cities)
{
$('#cities').empty();
$.each(cities,function(i,city)
{
var opt = $('<option />');
opt.val(city.value);
opt.text(city.text);
$('#cities').append(opt);
});
}
ОБНОВЛЕНИЕ в вашей функции успеха ajax вы имеете дело с объектами json, в действительностивы делаете это:
opt.val(city.value);
opt.text(city.text);
где city - это объект json, а значение и текст - его свойства.
когда вы генерируете json через php, вы должны уважать то, что используете в jqueryпоэтому ваша модель должна возвращать массив, подобный следующему:
array
(
array("value"=>"2","text"=>"Accra"),
array("value"=>"3","text"=>"Kumasi"),
....
);
json_encode, который должен работать.Может быть, вам не нужно заключать вызов модели в массив, но я не уверен, что это зависит от того, как вы возвращаете массив
echo(json_encode(array($this->cities_model->get_cities($country))));
или
echo(json_encode($this->cities_model->get_cities($country)));