【问题标题】:Asynchronously query the database by using ajax and jquery and post the result back in codeigniter View使用 ajax 和 jquery 异步查询数据库并将结果返回到 codeigniter 视图
【发布时间】:2015-04-03 19:51:20
【问题描述】:

我为此苦苦挣扎。

我想在 CI 模型中发送一个 ID 并通过 CI 控制器获取返回值

我的看法是

      <script type="text/javascript">
             function showsome(){
                 var rs = $("#s_t_item option:selected").val();
                 var controller = 'items';
                 var base_url = '<?php echo site_url(); ?>';

                 $.ajax({
                         url : base_url+ '/' + controller+ '/get_unit_item',
                     type:'POST',
                     contentType: 'json',
                     data: {item_id: rs},
                     success: function(output_string){
                         //$('#result_area').val(output_string);
                         alert(output_string);
                     }
                 });

             }

         </script>

我的控制器方法是

    public function get_unit_item()
      {
        $received = $this->input->post('item_id');  

        $query = $this->units_model->get_unit_item($received);
        $output_string = '';
        if(!is_null($query)) {
        $output_string .= "{$query}";
        } else {
        $output_string = 'There are no unit found';
        }
        echo json_encode($output_string); 
}

而我的模型功能负责

public function get_unit_item($where){
    $this->db->where('item_id',$where);
    $result = $this->db->get($this->tablename);
    if($result->num_rows()  >0 ){
        $j = $result->row();
        return $j->unit_item_info ; 
    }
}

HTML代码

   <?php $id = 'id="s_t_product" onChange="showsome();"';
        echo form_dropdown('product_id[]', $products, $prod,$id); ?>

我尝试仅使用 id 但未能触发,因此传递函数 onchange 似乎选择了项目并触发

使用 firebug 我可以看到 post 请求发送 item_id=2 但响应长度为 0 并且 php 结果代码为 302

发布 回复

我怎样才能做到这一点?(模型加载到构造器上)

【问题讨论】:

  • 您向我们展示了 getprice 的请求,但是您发布的 ajax 代码向 get_unit_item 发出了请求。请向我们发送一致的信息。
  • 更新,我认为从屏幕截图中您可以看到请求成功
  • @NaszNjokaSr。发布您的模型代码,并且您的 if 条件必须类似于 if(!empty($query)) 或类似的东西,因为您可以看到您的 if 条件没有任何意义跨度>
  • @NarendraSisodia 已更新,但结果相同。从返回值来看,调用似乎被重定向到登录页面

标签: php jquery ajax codeigniter


【解决方案1】:

稍微改变你的控制器和模型:

// Model 
public function get_unit_item($where){
    $this->db->where('item_id',$where);
    $result = $this->db->get($this->tablename);

    if($result->num_rows()  > 0 ) {
        $j = $result->row();
        return $j->unit_item_info ; 
    }
    else return false;
}


// Controller 
public function get_unit_item()
  {
    $received = $this->input->post('item_id');  
    $return = array('status'=>false);

    if( $query = $this->units_model->get_unit_item($received) ) {
        $return['status'] = true;
        // Add more data to $return array if you want to send to ajax
    }


    $this->output->set_content_type("application/json")
                 ->set_output(json_encode($return));
}

检查 JavaScript 中的返回值:

$.ajax({
     url : base_url+ '/' + controller+ '/get_unit_item',
     type:'POST',
     dataType: 'json',
     data: {item_id: rs},
     success: function( response ){
           if( response.status === true ) {
               alert('Everything Working Fine!');
               console.log( response );
           }
           else alert('Something went wrong in query!');
     }
 });

【讨论】:

  • 好的,我这样做了,结果出了点问题。实际上,如果我检查 response.status 它返回未定义。我认为模型甚至没有被调用页面被立即重定向到登录页面
  • 你在哪里实现了 html 中的showsome()
  • 是的,它在 onchange 的下拉菜单中
【解决方案2】:

在尝试了各种方法后,我终于找到了真正的问题所在,我认为这可能是所有 302 发现错误的问题。在这个项目(服务器)中,同一个根目录中有两个系统,每个系统都有自己的 codeigniter 文件。如上所示,我正在使用

             var controller = 'items';
             var base_url = '<?php echo site_url(); ?>';
             url : base_url+ '/' + controller+ '/get_unit_item',

作为 url 的值,但我试图从基础中放置完整的 url 并且它有效,所以现在它是

      url: '<?php echo base_url(); ?>index.php/en/items/get_unit_item',

。我认为对于任何有重定向问题的人来说,首先要检查的是这个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2012-02-07
    • 2011-04-09
    • 1970-01-01
    • 2018-01-17
    • 2015-11-20
    相关资源
    最近更新 更多