I am trying to show data from 5 rows of Database (MySQL) to rows of table using on success of jQuery AJAX
call. The data is in JSON
format.
Issue: I am not able to figure out to get all of those rows. I can get only one row but console
showed me all the rows in JSON
format.
$.ajax({
url: '<?php echo base_url('ads/select_post'); ?>',
data: {},
dataType: "json",
cache: false,
success: function (data) {
$.each(data, function (i, val) {
console.log(val.name);
$("#name").html(val.name);
$("#price").html(val.price);
$("#addr").html(val.addr);
$("#des").html(val.des);
$("#viewed").html(val.viewed);
$("#status").html(val.status);
});
}
});
Console output:
[{"name":"dfasdfas","price":"0","addr":"dfasdfas","des":"sadfdfasdfasdf","viewed":"0","img":"","status"
:"1"},{"name":"Heng","price":"0","addr":" dflkas;df","des":"asdfasdf"
,"viewed":"0","img":"","status":"1"},{"name":"asdDasdA","price":"0","addr":"asdADasd","des":"ASDasdASD"
,"viewed":"0","img":"","status":"1"},{"name":"asdfas","price":"0","addr":"fasdfas","des":"dfasdf","viewed"
:"0","img":"","status":"1"},{"name":"asdf","price":"0","addr":"asdfasdfas","des":"asdfasdfasdf","viewed"
:"0","img":"","status":"1"}]
HTML
of the table i am sending data to,
<tbody id="items">
<tr>
<td>1</td>
<td><a><div id="name"></div> </a></td>
<td><a><div id="price"></div> </a></td>
<td><a><div id"addr"></div></a></td>
<td><div id="des"></div> </td>
<td><a><div id="viewed"></div></a></td>
<td><a><div id="status"></div></a></td>
</tr>
Please advise.
Lots of good answers, but since I've created an example I'll post that too. If nothing else it might give you, or someone else, an alternative solution. I'm using classes instead of Id's, and keep your original structure.
Since this was accepted as answer I should also mention why your code failed:
Your each
loop is continually overwriting the contents of your table row data, instead of creating new rows. Another thing that needed fixing is that you had given the columns Id's, and those cannot stay (as they were) if you want to repeat the rows, since Id's within a page must be unique.
There are many methods to create new elements. I chose clone()
as I figure you would always have a row for header that could easily be used to clone/copy. Also I added a unique Id attribute to each tr
. These are not really used in the current implementation below, but it might be good to have as reference later in your project.
var data = [{"name":"dfasdfas","price":"0","addr":"dfasdfas","des":"sadfdfasdfasdf","viewed":"0","img":"","status"
:"1"},{"name":"Heng","price":"0","addr":" dflkas;df","des":"asdfasfasdfasdfasdfasdfasfasdfasdfasdfas"
,"viewed":"0","img":"","status":"1"},{"name":"asdDasdA","price":"0","addr":"asdADasd","des":"ASDasdASD"
,"viewed":"0","img":"","status":"1"},{"name":"asdfas","price":"0","addr":"fasdfas","des":"dfasdf","viewed"
:"0","img":"","status":"1"},{"name":"asdf","price":"0","addr":"asdfasdfas","des":"asdfasdfasdf","viewed"
:"0","img":"","status":"1"}];
//place within the Ajax success
$.each(data, function(i, val) {
var currRow = $("#tr0").clone().appendTo($('#items')).attr('id','tr' + (i + 1));
currRow.find('td:eq(0)').html(i + 1);
currRow.find('.name').html(val.name);
currRow.find('.price').html(val.price);
currRow.find('.addr').html(val.addr);
currRow.find('.des').html(val.des);
currRow.find('.viewed').html(val.viewed);
currRow.find('.status').html(val.status);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tbody id="items">
<tr id="tr0">
<td>Id</td>
<td><a><div class="name">Name</div></a></td>
<td><a><div class="price">Price</div></a></td>
<td><a><div class="addr">Addr</div></a></td>
<td><div class="des">Des</div></td>
<td><a><div class="viewed">Viewed</div></a></td>
<td><a><div class="status">Status</div></a></td>
</tr>
</tbody>
</table>
You can try this, I test it locally and it works:
$.ajax({
url: '<?php echo base_url('ads/select_post'); ?>',
data: {},
dataType: "json",
cache: false,
success: function (data) {
$.each(data, function (i, val) {
var tr = "<tr>" +
"<td>"+ (i + 1) + "</td>" +
"<td>"+ val.name + "</td>" +
"<td>"+ val.price + "</td>" +
"<td>"+ val.addr + "</td>" +
"<td>"+ val.des + "</td>" +
"<td>"+ val.viewed + "</td>" +
"<td>"+ val.status + "</td>" +
"</tr>";
$(tr).appendTo("tbody");
});
}
});
And your html table
:
<table>
<tbody id="items">
</tbody>
</table>
You need something like this:
DEMO HERE
HTML Structure
<table>
<thead>
<th>Sl No.</th>
<th>Address</th>
<th>Description</th>
<th>Image</th>
<th>Name</th>
<th>Price</th>
<th>Status</th>
<th>Viewed</th>
</thead>
<tbody id="items">
</tbody>
</table>
JS
$.each(data, function (i, val) {
$("tbody#items").append("<tr><td>"+(i+1)+"</td><td><a><div>"+val.addr+"</div></a></td>"
+"<td><a><div>"+val.des+"</div></a></td>"
+"<td><a><div>"+val.img+"</div></a></td>"
+"<td><a><div>"+val.name+"</div></a></td>"
+"<td><a><div>"+val.price+"</div></a></td>"
+"<td><a><div>"+val.status+"</div></a></td>"
+"<td><a><div>"+val.viewed+"</div></a></td></tr>");
});
You need to create table rows() in the ajax success.
And you should not use same ids in the td tags.
var html = "";
$.ajax({
url: '<?php echo base_url('ads/select_post'); ?>',
data: {},
dataType: "json",
cache: false,
success: function (data) {
$.each(data, function (i, val) {
console.log(val.name);
html +="<tr>";
html += "<td>" + val.name + "</td>" ;
html += "<td>" + val.price + "</td>" ;
html += "<td>" + val.addr + "</td>" ;
html += "<td>" + val.des + "</td>" ;
html += "<td>" + val.viewed + "</td>" ;
html += "<td>" + val.status + "</td>" ;
html +="</tr>";
});
$("$items").html(html);
}
});
Your html:
<table>
<tbody id="items">
</tbody>
</table>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With