【问题标题】:How to fetch data from mySQL and view in Modal如何从 mySQL 中获取数据并在 Modal 中查看
【发布时间】:2019-02-19 11:03:13
【问题描述】:

我试图通过在单击链接时显示模态来显示我的表列中名为 tidketprob 的一些记录。模态和查询看起来很好(通过回显 last_query 检查),但模态显示没有数据...请帮助我:(

JS代码:

$('#showdata').on('click', '.item-info', function(){
  var tid = $(this).attr('data');

  $.ajax({
    type: 'ajax',
    method: 'get',
    url: '<?php echo base_url() ?>repeatproblem/infoReprob',
    data: {tid:tid},
    async: false,
    dataType: 'json',
    success: function(data){
      var html = '';
      var i;
      for(i=0; i<data.length; i++){
        html +='<p>'+data[i].tid+'</p>'+
        '<p>'+data[i].ketprob+'</p>';
      }
      $('#infoModal').modal('show');
      $('#view_errorcode').html(html);
    },
    error: function(){
      alert('Gagal Info Kode Error!');
    }
  });
});

我的控制器:

public function infoReprob(){ 
    $result = $this->m->infoReprob(); 
    echo json_encode($result); 
}

我的模特:

public function infoReprob(){
    $tid = $this->input->get('tid');
    $this->db->select('tid, ketprob')->where('tid', $tid);
    $query = $this->db->get('histprob');
    if($query->num_rows() > 0){
        return $query->row();
    }else{
        return false;
    }
 }

【问题讨论】:

    标签: javascript php mysql ajax codeigniter


    【解决方案1】:

    如果此条件为真,您将在模型中使用return $query-&gt;row(); 语法:$query-&gt;num_rows() &gt; 0,这意味着您的模型将返回查询第一行的对象表示和下面控制器中的 $result 变量将是一个具有两个属性的对象:tidketprob

    public function infoReprob(){ 
        $result = $this->m->infoReprob(); 
        echo json_encode($result);
    }
    

    现在看看你的ajax调用成功回调函数

    success: function(data){
        var html = '';
        var i;
        for(i=0; i<data.length; i++){
            html +='<p>'+data[i].tid+'</p>'+
            '<p>'+data[i].ketprob+'</p>';
        }
        $('#infoModal').modal('show');
        $('#view_errorcode').html(html);
    }
    

    由于您上面的控制器使用echo json_encode($result); 语法,您的ajax 调用将返回$result 变量的json 表示,并且您上面的成功回调函数中的data 变量将如下所示

    { "tid": "1", "ketprob": "abc" }
    

    问题是,您的 ajax 成功回调函数中的 data.length 将未定义,因为 data 不是数组,因此不会执行 for 循环并且 html 将是一个空字符串,见this jsfiddle。这就是您的模态显示没有数据的原因。

    要解决此问题,我建议您更改您的模型代码,如下所示

    public function infoReprob(){
        $tid = $this->input->get('tid');
        $this->db->select('tid, ketprob')->where('tid', $tid);
        $query = $this->db->get('histprob');
        return $query->result();
    }
    

    通过使用return $query-&gt;result(); 语法,您的模型将始终返回一个对象数组。结果,您的 ajax 调用将返回这样的 json

    [ { "tid": "1", "ketprob": "abc" } ]
    

    这是一个 json 数组,因此您的 ajax 成功回调函数中的 data.length 不会未定义,并且您的模式将显示数据。查看this jsfiddle,您会看到html 变量不为空。

    【讨论】:

      【解决方案2】:

      通过将return $query->row();改为return $query->result();

      解决

      要去了解这个。或者任何人都可以告诉不同的..谢谢

      public function infoReprob(){
          $tid = $this->input->get('tid');
          $this->db->select('tid, ketprob')->where('tid', $tid);
          $query = $this->db->get('histprob');
          if($query->num_rows() > 0){
              return $query->result();
          }else{
              return false;
          }
       }
      

      【讨论】:

      • 正如here 解释的那样,区别在于$query-&gt;row() 返回一个对象,而$query-&gt;result() 返回一个对象数组。请参阅我的回答以了解为什么 $query-&gt;row() 不起作用但 $query-&gt;result() 在您的代码中起作用。
      【解决方案3】:

      我猜你应该使用echo $query-&gt;row(); 而不是return $query-&gt;row();

      【讨论】:

      • 感谢回复,改成echo而不是return,但是显示JS Error alert。
      • 也许删除 dataType: 'json' - 从表中收到的数据往往不是正确的 JSON 数据。
      • @DamianCzapiewski 删除 json 并显示长整页文本“未定义”
      • @Vickel 此代码已经在我的控制器中进行了 json 化: public function infoReprob(){ $result = $this->m->infoReprob();回声 json_encode($result); }
      猜你喜欢
      • 1970-01-01
      • 2013-01-26
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2023-04-03
      • 2021-05-11
      相关资源
      最近更新 更多