在表

时间:2017-06-21 06:05:26

标签: php jquery json ajax codeigniter

我正在尝试根据日期范围显示记录。

脚本

$(function() {
  $(document).on("click", "#btnSubmit", function(e) {
    e.preventDefault();
    var info = $("#search").serialize();
    alert(info);

    $.ajax({
      type: 'POST',
      url: 'url',
      data: info,
      success: function(response) {
        alert(response);
        var obj = $.parseJSON(response);
        var trHTML = '';

        $.each(response, function(i, o) {
          trHTML += '<tr><td>' + o.patient_name +
            '</td><td>' + o.patient_address +
            '</td></tr>';
        });

        $('#records_table').append(trHTML);
      }
    });

    e.preventDefault();
  });
});

HTML

<table class='table table-striped table-bordered table-hover' id='records_table'>
</table>

控制器

public function getsearch(){

    $this->load->model('History_m');
    $fromdate=$this->input->post('dateFrom');
    $todate=$this->input->post('dateTo');

    $date1=date( 'Y-m-d', strtotime($fromdate));
    $date2=date( 'Y-m-d', strtotime($todate));

    $result  = $this->History_m->search($date1,$date2);
    echo json_encode($result);     
}

模型

function search($date1,$date2){
    $this->db->trans_start();
    $query = $this->db->query("SELECT * FROM `referral_confirmation_details` WHERE `created_on` >= '".$date1."' AND `created_on` <= '".$date2."'");
    $this->db->trans_complete();
    if($query->num_rows()>=1)
        return $query->result();
    }

AJAX响应

我得到alert(response)的输出为:

[
   {
      "ID":"1",
      patient_name":"xyz",
      "patient_email":"xyz@gmail.com",
      "gender":"Male",
      "age":"23",
      "address":"xyz",
      "city":"bangalore",
      "password":"fzf1"
   }

我收到错误,例如“位于0的JSON中的意外令牌A”。

6 个答案:

答案 0 :(得分:1)

$.each(response, function (i, o){
   trHTML += '<tr><td>' + o.patient_name +
             '</td><td>' + o.patient_address +
          '</td></tr>';
 });

你在每个循环中传递响应变量你应该添加obj,否则你应该首先使用解析并传入循环。所以你可以解决问题。 并且在你的json回应中有缺失。

答案 1 :(得分:1)

里面有两个错误:

请更改

$.each(response, function(i, o) {
  trHTML += '<tr><td>' + o.patient_name +
    '</td><td>' + o.patient_address +
    '</td></tr>';
});

$(obj).each(function(i) {
  trHTML += '<tr><td>' + this.patient_name +
    '</td><td>' + this.patient_address +
    '</td></tr>';
});

您希望迭代解析的JSON对象而不是HTTP响应,对吧?如需进一步阅读,请查看jQuery $().eachhttps://api.jquery.com/each/

的文档

答案 2 :(得分:0)

您没有使用JSON对象,而是使用响应JSON字符串。 尝试

$.each(obj, function (i, o){
  trHTML += '<tr><td>' + o.patient_name +
            '</td><td>' + o.patient_address +
            '</td></tr>';
});

答案 3 :(得分:0)

我认为json

结尾处缺少]
[{"ID":"1","patient_name":"xyz","patient_email":"xyz@gmail.com","gender":"Male","
age":"23","address":"xyz","city":"bangalore","password":"fzf1"}]

答案 4 :(得分:0)

您需要将字符串转换为对象。试试以下..

$.ajax({

    type: 'POST',
    url: 'url',
    data: info,
    dataType: 'json',
    success: function(response){

        var obj = $.parseJSON(response);   

        var trHTML = '';
        $.each(obj, function (i, o){
        trHTML += '<tr><td>' + o.patient_name +
                 '</td><td>' + o.patient_address +
              '</td></tr>';

});

答案 5 :(得分:0)

谢谢大家,我终于得到了结果。我已经更新了正确的脚本,以便对面临同样问题的人有所帮助。

   $(document).on("click", "#btnSubmit", function(e) {
   e.preventDefault();

    var info = $("#search").serialize();
     $.ajax({

type: 'POST',
url: 'url',
data: info,
dataType: 'json',
success: function(response){

    var trHTML = '';
    $.each(response, function (i, o){
   trHTML += '<tr><td>' + o.patient_name +
         '</td><td>' + o.patient_address +
      '</td></tr>';
          });
  $('#records_table').append(trHTML);
      }
    });
    e.preventDefault();
  });