我知道这可能是第 [insertLongNumber] 有人问这个问题,我做了我的研究,但我找不到适合我的问题的另一个答案。所以就在这里。
我正在使用 php 和 ajax 在 codeigniter 中处理动态下拉列表。我是 CI 新手,我对 Ajax 有基本的了解。
到目前为止我注意到的是,在控制台中,它没有识别来自第一个下拉列表的值,所以我得到了 departamento_id : undefined 这让我觉得问题来自 ajax 脚本(我从网上得到了它)
我的观点,包括 ajax 代码
<?php
$this->load->helper('html');
?>
<html>
<head>
<title>Buscador</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#dpto-dropdown select').change(function () {
var selDpto = $(this).attr('value');
console.log(selDpto);
$.ajax({
url: "test/ajax_call",
async: false,
type: "POST",
data: "departamento_id="+selDpto,
dataType: "html",
success: function(data) {
$('#ciudad').html(data);
}
})
});
});
</script>
</head>
<?php echo form_open('test/buscar');?>
<?php
<div id='dpto-dropdown'><?php print form_dropdown('departamentos', $departamento) ?></div>
<div id="ciudad"><select><option value=''>-</option></select></div>
//rest of code...
这是我的控制器代码:
class Test extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('buscador_model');
}
function index()
{
$departamentos = $this->buscador_model->traerInfoDptos();
$precios = $this->buscador_model->traerPrecioHoteles();
foreach($departamentos as $departamento){
$dpto_final[$departamento->id] = $departamento->nom_departamento;
}
$info = array(
'departamento' => $dpto_final,
'precios' => $precios,
);
$this->load->view('buscador_view', $info);
}
function ajax_call()
{
//check to see people wont go directly
if (isset($_POST) && isset($_POST['departamento_id']))
{
$dpto = $_POST['departamento_id'];
$ciudad = $this->buscador_model->traerCiudadPorDpto($dpto);
foreach ($ciudad as $c)
{
$ciudadfinal[$c->cod_ciudad] = $c->nom_ciudad;
}
//dropdown
echo form_dropdown('Ciudades', $ciudadfinal);
}
else
{
redirect('index');
}
}
}
这是我的模型:
Class Buscador_model extends CI_Model
{
function traerInfoDptos()
{
$this->db->select('id, nom_departamento');
$this->db->from('departamento');
$query = $this->db->get();
if ($query->num_rows > 0)
{
return $query->result();
}
}
function traerCiudadPorDpto($dpto)
{
$query = $this->db->query("SELECT nom_ciudad, cod_ciudad FROM ciudad WHERE departamento_id = '{$dpto}'");
if ($query->num_rows > 0)
{
return $query->result();
}
}
}// end buscador model class