php - Ajax 无法在 codeigniter 中工作来填充下拉列表

标签 php jquery ajax codeigniter

我正在尝试使用 codeigniter 中的 ajax 从下拉列表中的州获取城市。

我不明白出了什么问题?下面是代码:

<?
## controller ##
class Pages extends CI_Controller {
    public function __construct()
  {
       parent::__construct();
       $this->load->model('home_model');
       $this->load->model('sub_cat_model');
       $this->load->model('state_model');
       $this->load->model('city_model');
       $this->load->model('location_model');
       $this->load->library('email');
  }
public function index()
{
      $data['state'] = $this->home_model->get_state();
     $data['title'] = 'Rimi Classified - Home';

      $this->load->view('templates/header', $data);
    $this->load->view('index', $data);
    $this->load->view('templates/footer', $data);
}
 public function sign_up()
 {
 $data['states'] = $this->state_model->get_states();

 $data['error'] = '';
     $data['title'] = 'Rimi Classified - Sign up';
 $this->load->view('templates/header1', $data);
 $this->load->view('sign-up', $data);
 $this->load->view('templates/footer', $data);      
 }
public function get_cities($state){

 header('Content-Type: application/x-json; charset=utf-8');
echo(json_encode($this->city_model->get_cities($state)));
  }
}

> ##country model ##

class State_model extends CI_Model {

public function __construct() {
 $this -> load -> database();

}

function get_states() {
 $query = $this->db->order_by('state', 'ASC')->get('state');


$states = array();

if ($query -> result()) {
 foreach ($query->result() as $state) {
  $states[$state -> id] = $state -> state;
 }
  return $states;
 } else {
  return FALSE;
  }
 }

> ## city_model starts ##

<?php
class City_model extends CI_Model {

 public function __construct() {
  $this -> load -> database();
  //$this->output->enable_profiler(TRUE);

}
function get_cities($state = NULL){
  if($state != NULL){
      $this->db->where('state_id', $state);

     $query = $this->db->get('city');
     $cities = array();
     if($query->result())
     {
        foreach ($query->result() as $city) 
        {
        $cities[$city->id] = $city->city;
        }
              return $cities;
         }
     else
     {
        return FALSE;
     }
    }
    else
    {
        $cities[] = "-- Select City --";
        return $cities;
    }
 }
}


> ## view ##

  <div id="innerdiv1">
        <label>State</label>


$states['#'] = '-- Select State --';

echo form_dropdown('state_id', $states, '#', 'id=state_id');
?>
      </div>
      <div id="innerdiv2">
        <label>City</label>

<select name="city_id" id="city_id">
<option value="">-- Select City-- </option>
</select>
      </div>


> ## Ajax starts here ##

  <script type="text/javascript">// <![CDATA[
 $(document).ready(function(){
  var base_url = "<?=base_url()?>";
  $('#state_id').change(function(){ 
  $("#city_id > option").remove(); 
  var state = $('#state_id').val(); 

  $.ajax({
  type: "POST",
      url: base_url+"pages/get_cities/"+state, 

  success: function(cities) 
  {
      $.each(cities,function(id,city)
      {
      var opt = $('<option />'); 
      opt.val(id);
      opt.text(city);
          $('#city_id').append(opt); 
     });
 }
 });
});
 });
 // ]]>
</script>

上面是代码,我找不到错误。谁能帮我解决一下

这个问题。 csrf_protection 在配置中设置为 true。

最佳答案

您应该在 javascript ajax post 中传递 CSRF 名称和值..

 <script>
         var csfrData = {};
         csfrData['<?php echo $this->security->get_csrf_token_name(); ?>']
                           = '<?php echo $this->security->get_csrf_hash(); ?>';
         $.ajax({
           type: "POST",
           url: base_url+"pages/get_cities/"+state, 
           data : csfrData,
           success: function(cities) 
           {
             $.each(cities,function(id,city){
                 var opt = $('<option />'); 
                 opt.val(id);
                 opt.text(city);
                 $('#city_id').append(opt); 
            });
          }
       });
       </script>

在PHP Controller 中返回将不起作用,请使用die

 header('Content-Type: application/json; charset=utf-8');
 die(json_encode($this->city_model->get_cities($state)));

关于php - Ajax 无法在 codeigniter 中工作来填充下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22086493/

相关文章:

javascript - 使用 jQuery 放大元素的 "hover"区域 - 最简单的方法

ajax - D3 : How to dynamically refresh a graph by changing the data file source?

.net - 分页在 extjs 网格中不起作用,与 Ajax 调用绑定(bind)

php - 从数据库中获取列名

php - 单选组和多个插入

php - 显示登录 JS 弹出窗口以进行身份​​验证所需的操作

php - 如何自动点击href?

javascript - 在 jQuery 日期选择器插件中仅显示周末

javascript - 允许用户在文本框中仅添加空格且电话号码不超过 11 个

javascript - 客户端网络技术可以用来扫描图像吗?