Reputation: 106
I am using a php script to produce a json array. The json array is retrieved by a jquery ajax script which then tries to read it and embed it in an html table. However, I'm stuck since it keeps producing 'undefined' data in the table. I want to display the information of the json array in my table after the ajax returns successfully. Please help...
The JSON Array format
[{"fullname":"Frank Robsinga","gender":"Male","email":"n\/a","phone":"n\/a","status":"1"}]
The javascript
<script>
$("#lookup").click(function() {
var key = $("#search").val();
$.ajax({
type : 'POST',
url : 'scripts/search-user-script.php',
data : {
key : key
},
success : function(obj) {
$("#usersdata").html("");
for (var i = 0; i < obj.length; i++) {
var tr = "<tr>";
var td0 = "<td>" + (i + 1) + "</td>";
var td1 = "<td>" + obj[i]["fullname"] + "</td>";
var td2 = "<td>" + obj[i]["gender"] + "</td>";
var td3 = "<td>" + obj[i]["email"] + "</td>";
var td4 = "<td>" + obj[i]["phone"] + "</td>";
var td5 = "<td>" + obj[i]["status"] + "</td></tr>";
$("#usersdata").append(tr + td0 + td1 + td2 + td3 + td4 + td5);
}
}
});
// .ajax
});
</script>
Upvotes: 2
Views: 1010
Reputation: 12854
Your ajax call return a String. You need to parse it into an Object
before use it.
Try obj = JSON.parse(obj)
before your for
loop.
Like :
function(obj) {
obj = JSON.parse(obj); // Add this line
$("#usersdata").html("");
for (var i = 0; i < obj.length; i++) {
var tr = "<tr>";
var td0 = "<td>" + (i + 1) + "</td>";
var td1 = "<td>" + obj[i]["fullname"] + "</td>";
var td2 = "<td>" + obj[i]["gender"] + "</td>";
var td3 = "<td>" + obj[i]["email"] + "</td>";
var td4 = "<td>" + obj[i]["phone"] + "</td>";
var td5 = "<td>" + obj[i]["status"] + "</td></tr>";
$("#usersdata").append(tr + td0 + td1 + td2 + td3 + td4 + td5);
}
}
Upvotes: 3
Reputation: 15555
var obj = [{
"fullname": "Frank Robsinga",
"gender": "Male",
"email": "n\/a",
"phone": "n\/a",
"status": "1"
}]
for (var i = 0; i < obj.length; i++) {
console.log(obj[i].fullname)
console.log(obj[i].gender)
console.log(obj[i].email)
console.log(obj[i].phone)
console.log(obj[i].status)
}
<table id='usersdata'></table>
you have to .
also remove [""]
like obj[i].status
you ajax should look like :
$.ajax({
type : 'POST',
url : 'scripts/search-user-script.php',
dataType:'json',
data : {
key : key
},
success : function(obj) {
$("#usersdata").html("");
for (var i = 0; i < obj.length; i++) {
var tr = "<tr>";
var td0 = "<td>" + (i + 1) + "</td>";
var td1 = "<td>" + obj[i].fullname + "</td>";
var td2 = "<td>" + obj[i].gender + "</td>";
var td3 = "<td>" + obj[i].email + "</td>";
var td4 = "<td>" + obj[i].phone + "</td>";
var td5 = "<td>" + obj[i].status + "</td></tr>";
$("#usersdata").append(tr + td0 + td1 + td2 + td3 + td4 + td5);
}
}
});
Upvotes: 2
Reputation: 2060
I tried your code and was able to see the correct output. I guess, you must be having some errors, see the console to check it.
Please find the demo.
Refer to the code below:
HTML:
<table id="dataTable">
</table>
JS:
$(function() {
var data = [{
"fullname": "Frank Robsinga",
"gender": "Male",
"email": "[email protected]",
"phone": "3243434343",
"status": "1"
}, {
"fullname": "Lorem ipsum",
"gender": "Male",
"email": "[email protected]",
"phone": "3445656565",
"status": "2"
}, {
"fullname": "ex eam dictas",
"gender": "Female",
"email": "[email protected]",
"phone": "87878676",
"status": "1"
}];
for (i = 0; i < data.length; i++) {
var tr = "<tr>";
var td0 = "<td>" + (i + 1) + "</td>";
var td1 = "<td>" + data[i]["fullname"] + "</td>";
var td2 = "<td>" + data[i]["gender"] + "</td>";
var td3 = "<td>" + data[i]["email"] + "</td>";
var td4 = "<td>" + data[i]["phone"] + "</td>";
var td5 = "<td>" + data[i]["status"] + "</td></tr>";
$("#dataTable").append(tr + td0 + td1 + td2 + td3 + td4 + td5);
}
});
CSS:
table {
border-collapse: collapse;
}
table,
td {
border: 1px solid;
}
Upvotes: -1
Reputation: 1022
Try the following code, Make sure that your json properties have values. it should not contain NULL Values.
var obj = [{"fullname": "Fname Lname",
"gender": "M"},{"fullname": "Name2 name",
"gender": "F"}]
for (var i = 0; i < obj.length; i++) {
var tr = "<tr>";
var td0 = "<td>" + (i + 1) + "</td>";
var td1 = "<td>" + obj[i].fullname + "</td>";
var td2 = "<td>" + obj[i].gender + "</td>";
$("#usersdata").append(tr + td0 + td1 + td2 );
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<table id="usersdata" > </table>
Upvotes: 0