【问题标题】:Codeigniter return and display the array result of model function, called by jquery, on my viewCodeigniter 在我的视图中返回并显示由 jquery 调用的模型函数的数组结果
【发布时间】:2013-05-20 13:26:46
【问题描述】:

我在我的应用程序中使用 codeigniter。我有一个自动完成下拉菜单,在选择时会调用控制器函数来显示有关所选下拉值的更多详细信息。

我已成功使用以下语法返回单个结果,但现在需要将整个数组返回到视图并显示具有多列的每个返回的行。

所以单个结果的语法是:

控制器

function get_link_load_options(){

    $this->load->model('Sales_model');
    if (isset($_POST['data'])){
        $q = strtolower($_POST['data']);
        $data = $this->Sales_model->get_link_load_options($q);
        $this->output->set_content_type('application/json')->set_output(json_encode($data));
    }
}

型号

function get_link_load_options($q){
    $this->db->select('TotalCubes,CustomerName,TotalCubes, TreatedCubes');
    $this->db->where('CustomerOrderID', $q);
    $query = $this->db->get('Customer_Order_Summary');
    if($query->num_rows > 0){
        foreach ($query->result_array() as $row){
            $row_set[] = htmlentities(stripslashes($row['TotalCubes'])); 
       return $row_set;
    }
  }

查看 Jquery

   $.post('get_link_load_options', {data:substr[1]},function(result) { 
   $('input[name^="totalcubes"]').val(result[0]);
   }); 

那么我该如何调整/更改它以使用get_link_load_options 函数结果填充我的视图。

这是最好的方法还是我应该使用另一种方法? 可以传递整个数组$query,如果可以,我如何使用 jquery / javascript 将数组呈现到表中?

当我执行上述操作时,我得到了响应: Message: json_encode(): type is unsupported, encoded as null

一如既往的感谢。

【问题讨论】:

  • 我在我的服务中只使用echo json_encode($data); 用于ajax,也许你可以将$query 结果直接传递给json_encode 函数。

标签: jquery database codeigniter


【解决方案1】:

你不需要json,你可以简单地这样做。只需创建一个首先为空的 div。您的 jquery 结果将像这样填充它

控制器

function get_link_load_options(){
    $this->load->model('Sales_model');
    if (isset($_POST['data'])){
        $q = strtolower($_POST['data']);
        $data['result'] = $this->Sales_model->get_link_load_options($q);
        $this->load->view('myview',$data);
    }
}

jQuery

$.post('get_link_load_options', {data:substr[1]},function(result) { 
   $('#div_id').html(result);
}); 

【讨论】:

  • 嗨,Raheel,感谢您再次帮助我!因此,当我查看从您的代码中获得的服务器响应时,它实际上是在加载整个页面的源代码?您的示例中的'myview' 是否应该是一个将在 div 中加载的新页面?那么我可以按照正常的控制器/视图功能访问 $data 内容吗?还是我离题了?再次感谢。
  • @Smudger 你是对的,你可以简单地通过控制器加载一个视图,然后通过 jquery 将该视图传递给一个 div。这是我认为最简单的方法
  • 谢谢拉希尔。问题,如何将两个数据值传递给控制器​​?类似:$.post('get_link_load_options', {data:var1,var2},function(result) { ?然后在我的控制器中我可以使用 var1 作为 $q 和 var2 作为 $r?这可能吗,因为我需要传递多个变量才能在视图中显示所需的信息?再次感谢。
  • $.post("test.php", { name: "John", time: "2pm" }).done(function(data) { /* other stuff here */ }); 在 test.php 上收到姓名和时间
  • 谢谢拉希尔。使用您现在提供的语法,$.post("get_link_load_options", { varlatitude: latitude, varlongitude: longitude }).done(function(data) { $('#results').html(result); }); 这会将 2 个变量纬度和经度打印到我的 div,而不是视图 get_link_load_options 的内容有什么想法吗?谢谢。
猜你喜欢
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多