开发者

jQuery: How to parse a multidemensional array?

开发者 https://www.devze.com 2022-12-26 17:14 出处:网络
I\'m not sure if the array is too deep or what, but I can\'t seem to get anything other than the keys and undefines. Help please!

I'm not sure if the array is too deep or what, but I can't seem to get anything other than the keys and undefines. Help please!

I'm using Codeigniter for development. Here is the PHP then the jQuery:

 $term = $this->input->post('search_term');

  $this->db->like('book_title', $term);

  $search_query = $this->db->get('books');

  $return = array();

  $i = 0;

  if ($search_query->num_rows() > 1) {

   foreach($search_query->result() as $s) {

    $return['books']['book_id'] = $s->book_id;
    $return['books']['book_title'] = $s->book_title;
    $return['books']['book_price'] = $s->book_price;

    $i++;

   }

  } elseif ($search_query->num_rows() == 1) {

    echo 1;

    $i = 0;

    $return['book_id'] = $search_query->row('book_id');
    $return['book_title'] = $search_query->row('book_title');
    $return['book_price'] = $search_query->row('book_price');


  } elseif ($search_query->num_rows() == 0) {

    echo 0;

  }



  echo json_encode($return);
开发者_运维知识库

Javascript

$("#search").change(function() {

  var searchTerm = $(this).val();

  $.post("/contentcreator/search_by_term", { search_term: searchTerm }, function(data) {

     $("#book_scroller").empty();

     var lengthHolder = data.books;

     for (var i = 0; i > data.books.length; i++) {

         var row = '<li id="book_item_' + l + '">' + data.books['book_title'] +'</li>';

         $("#book_scroller").append(row);


     };

     i++;


  }, "json");

});

Thanks!


One suggestion that I have is that your returned json should be in the same format regardless of the number of books returned. The way you have it set up if there is only one match, you return an array containing id, title, price, but if there is more than one you return an array containing a single(?) item books that is an array of id, title, price. It seems to me that you always want it to return an array of books -- each of which is an object containing id, title, price. Note that I fixed up a number of minor issues with your javascript as well. Disclaimer: I'm not a php programmer by any means -- my syntax could certainly be wrong.

Try this:

$i = 0;

foreach($search_query->result() as $s) {

    $return[$i]['book_id'] = $s->book_id;
    $return[$i]['book_title'] = $s->book_title;
    $return[$i]['book_price'] = $s->book_price;

    $i++;

}

Javascript

$("#search").change(function() {
  var searchTerm = $(this).val();
      $.post("/contentcreator/search_by_term", { search_term: searchTerm }, function(data) {
         $("#book_scroller").empty();
         for (var i = 0; i > data.length; i++) {
            var book = data[i];
            var row = '<li id="book_item_' + book.id + '">' + book.book_title +'</li>';
                $("#book_scroller").append(row);    
         };    
      }, "json");
 });
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号