How can I loop all json data and insert into my HTML? - php

I'd like to insert the Json data into my file.php. And so each group of them are insert into group of divs. (with the same style etc.)
I have a feeling the way I am using is not smart... better solutions are very welcome. Thanks guys.
$.ajax({
url: feedURL,
jsonpCallback: 'jsonpCallback',
contentType:"application/json",
dataType: 'jsonp',
success: function(json) {
for (var i=0; i < 15; i++) {
var date = new Date(json.posts.data[i].created_time);
var months = ["/01/", "/02/", "/03/", "/04/", "/05/", "/06/", "/07/",
"/08/", "/09/", "/10/", "/11/", "/12/"];
$("#description").html(json.posts.data[i].message);
$("#caption").html(json.posts.data[i].caption);
$("#expire_date").html(date.getDate() + months[date.getMonth()] + date.getFullYear());
$("#fb_link").html(
'<a href="' + json.posts.data[i].link + '">'
+ 'Total Like: ' + json.posts.data[i].likes.summary.total_count
+ ' Total Share: ' + json.posts.data[i].shares.count
+ ' View on Facebook' + '</a>'
);
$("#profile_img").html('<img src="' + json.picture.data.url + '">');
$("#profile_name").html(json.name);
$("#full_fb_photo").html('<img src="' + json.posts.data[i].full_picture + '">');
}
},
error: function(e) {
console.log(e.message);
}
});

You can write your code in flowing way. Uncountable date print in your loop. If I know your data format, I will give you exact way.
Try this code.
for (var prop in json.posts.data) {
$("#description").html(json.posts.data[prop].message);
// other same as
}

Thanks guys, i have figured out in this way.
$.ajax({
url: feedURL,
jsonpCallback: 'jsonpCallback',
contentType:"application/json",
dataType: 'jsonp',
success: function(json) {
var social_list = "";
for (i=0; i < 15; i++) {
var date = new Date(json.posts.data[i].created_time);
var months = ["/01/", "/02/", "/03/", "/04/", "/05/", "/06/", "/07/",
"/08/", "/09/", "/10/", "/11/", "/12/"];
social_list += "<div class='social_item'><div class='item'><div class='heading'>";
social_list += "<img src='" + json.picture.data.url + "'/><span>" + json.name + "</span><i class='fa fa-facebook'></i></div>";
social_list += "<div class='content'><p>Created on" + date.getDate() + months[date.getMonth()] + date.getFullYear() + "</p>";
social_list += "<div><img src='" + json.posts.data[i].full_picture + "' /></div>";
social_list += "<p name=" + i + ">" + json.posts.data[i].message + "</p>";
social_list += "<div><a href='" + json.posts.data[i].link + "'> Total Likes: " + json.posts.data[i].likes.summary.total_count + "Total Share: " + json.posts.data[i].shares.count + " View on Facebook </a></div>";
social_list += "</div></div></div>"
}
$('#social_list').html(social_list);

Related

Couldn't Calculate Price and Qty on table using Php Ajax

I am creating a ecommerce site for my final year project.while I am creating a project I ran in to the problem with product shall be able add the card but when I view the card product shown which I added into the card.my problem is if the give qty it will auto calculation and display result on the total textbox.and final totel show display below. I attached image below what i tried so far. But couldn’t calculate the total and final total.
Display the Products
<script>
getProducts();
function getProducts() {
$.ajax({
type: 'GET',
url: 'all_cart.php',
dataType: 'JSON',
success: function(data) {
data.forEach(function(element) {
var id = element.id;
var product_name = element.product_name;
var price = element.price;
$('#mytable tbody').after
(
'<tr> ' +
'<td>' + id + '</td>' +
'<td>' + product_name + '</td>' +
'<td>' + price + '</td>' +
"<input type='hidden' name='price' value='" + price + "'>" +
'<td>' + "<input type = 'text' id='qty' name='qty'/>" + '</td>' +
'<td>' + "<input type = 'text' id='amount'/>" + '</td>' +
'</tr>');
});
},
error: function(xhr, status, error) {
alert(xhr.responseText);
}
});
}
Auto calcaltion the price * qty
$(function() {
$("#price, #qty").on("keydown keyup click", qty);
function qty() {
var sum = (
Number($("#price").val()) * Number($("#qty").val())
);
$('#amount').val(sum);
console.log(sum);
}
});
You dont should append multiple elements with same ID in a page
Can you try
function getProducts() {
$.ajax({
...
$('#mytable tbody').after
(
'<tr> ' +
'<td>' + id + '</td>' +
'<td>' + product_name + '</td>' +
'<td>' + price + '</td>' +
"<input type='hidden' name='price' class='price' value='" + price + "'>" +
'<td>' + "<input type = 'text' class='qty' name='qty'/>" + '</td>' +
'<td>' + "<input type = 'text' class='amount'/>" + '</td>' +
'</tr>');
});
},
error: function(xhr, status, error) {
alert(xhr.responseText);
}
});
}
$(function() {
$(".price, .qty").on("keydown keyup click", function () {
var price = $(this).parents('tr').find('.price');
var qty= $(this).parents('tr').find('.qty');
var sum = (
Number($(price).val()) * Number($(qty).val())
);
$(this).parents('tr').find('.amount').val(sum);
calculateAmount();
});
function calculateAmount() {
var total = 0;
$('.amount').each(function(e){
total += Number($(this).val());
});
$('#total-amount').text(total);
}
});
This is a demo: https://codepen.io/phuongnm153/pen/bymYOQ
When you get $("#price").val() and $("#qty").val() in jQuery but you have many $("#price") & $("#qty") duplicate. You should be run this in console.
I hope it's helpful for you

Make it pretty using php

object(stdClass)#1 (1) {
["return"]=>
string(43362) "[{"Searchstring":"?showitemlist=1&Keyword=blue&acctwebguid=12bad325-a118-4778-825a-cc7d5308e24f&orderby=ItemName%20DESC&requestguid=29E60B17-8601-4839-AD00-00DB0D45A2CB","Recordcount":15446},{"Maxretail":7.42000000,"Displayname":"","Suplitemno":"COA09B/K","Supplieritemid":"D7784D83-F63D-4219-BDB1-F7AE76F74CC8","Minretail":5.99000000,"Minqty":25,"Rushavailable":0,"Imagepath":"images/products/EA8E5917-F1D9-4089-BC09-DDE2FF03452F/medium/D7784D83-F63D-4219-BDB1-F7AE76F74CC8.jpg?_=1423597800","Imagepathsm":"images/products/EA8E5917-F1D9-4089-BC09-DDE2FF03452F/small/D7784D83-F63D-4219-BDB1-F7AE76F74CC8.jpg?_=1423597799","Prodtime":10,"Imagepathlg":"images/products/EA8E5917-F1D9-4089-BC09-DDE2FF03452F/large/D7784D83-F63D-4219-BDB1-F7AE76F74CC8.jpg?_=1423597800","Companyname":"Graphik Business Accessories","Displayno":"","Imagepathmd":"images/products/EA8E5917-F1D9-4089-BC09-DDE2FF03452F/medium/D7784D83-F63D-4219-BDB1-F7AE76F74CC8.jpg?_=1423597800","Shownopricing":0,"Itemname":"Zume Coaster Set"},{"Maxretail":50.38000000,"Displayname":"","Suplitemno":"7003-47","Supplieritemid":"F7374437-2DF5-4D4B-B654-32F7C7B8971E","Minretail":39.98000000,"Minqty":10,"Rushavailable":0,"Imagepath":"images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/F7374437-2DF5-4D4B-B654-32F7C7B8971E.jpg?_=1438623367","addlImagesLarge":["images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_b_1.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_b_3.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_d.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_d_2.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/7003_47-7003_47bk_d_3.jpg?_=1438623370"],"Imagepathsm":"images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/F7374437-2DF5-4D4B-B654-32F7C7B8971E.jpg?_=1438623367","Prodtime":5,"Imagepathlg":"images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/large/F7374437-2DF5-4D4B-B654-32F7C7B8971E.jpg?_=1438623367","addlImagesSmall":["images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_b_1.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_b_3.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_d.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_d_2.jpg?_=1438623370","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/small/7003_47-7003_47bk_d_3.jpg?_=1438623371"],"Companyname":"Leed&apos;s / Leeds","Displayno":"","Imagepathmd":"images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/F7374437-2DF5-4D4B-B654-32F7C7B8971E.jpg?_=1438623367","addlImagesMed":["images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_b_1.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_b_3.jpg?_=1438623368","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_d.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_d_2.jpg?_=1438623369","images/products/A0FB382C-C7AE-11D3-896A-00105A7027AA/medium/7003_47-7003_47bk_d_3.jpg?_=1438623370"],"Shownopricing":0,"Itemname":"Zoom® Audio Decibel Bluetooth Speaker"},.......
<script>
$(document).ready(function() {
var data = '[{"Maxretail":...,"Itemname":"Youth Chameleon T-Shirt"]';
var table = '<table><thead><th>First Name</th><th>Last Name</th><th>Image</th><th>More</th></thead><tbody>';
var obj = $.parseJSON(data);
$.each(obj, function() {
table += '<tr><td>' + this['Itemname'] + '</td><td>' + this['Supplieritemid'] + '</td><td><img src="https://cdn.distributorcentral.com/' + this['Imagepath'] + ' alt="' + this['Itemname'] + '" /></td><td><img src="https://cdn.distributorcentral.com/' + this['addlImagesSmall'] + ' alt="' + this['Itemname'] + '" />' + this['addlImagesSmall'] + '</td></tr>';
});
table += '</tbody></table>';
document.getElementById("datalist").innerHTML = table;
});

PHP-jQuery: Display a timer on each table row where end time is not set

I have a function that displays a countup timer but I've only been able to make it work for a single row. I'd like to make a timer appear on each row where the end time of the action has not yet been set.
This is the full code.
<script>
$('document').ready(function()
{
var uni_id = //value of id needed to query the database table;
$.ajax({
type : 'POST',
url : 'get_time.php',
dataType: 'json',
data : {uni_id: uni_id},
cache: false,
success : function(result)
{
for (var i = 0; i < result.length; i++){
var startDateTime = new Date(result[i].uni_start_time); //Not sure if it's wrong to add all returning values here but so far it works but only for a single row on the table.
var startStamp = startDateTime.getTime();
var newDate = new Date();
var newStamp = newDate.getTime();
var timer;
var rec_id = result[i].rec_id;
function updateTimer() {
newDate = new Date();
newStamp = newDate.getTime();
var diff = Math.round((newStamp-startStamp)/1000);
var days = Math.floor(diff/(24*60*60));
diff = diff-(days*24*60*60);
var hours = Math.floor(diff/(60*60));
diff = diff-(hours*60*60);
var minutes = Math.floor(diff/(60));
diff = diff-(minutes*60);
var seconds = diff;
days = (String(days).length >= 2) ? days : '0' + days;
hours = (String(hours).length >= 2) ? hours : '0' + hours;
minutes = (String(minutes).length >= 2) ? minutes : '0' + minutes;
seconds = (String(seconds).length >= 2) ? seconds : '0' + seconds;
$("#on_going_"+rec_id).html(hours+':'+minutes+':'+seconds);
}
setInterval(updateTimer, 1000);
$('#uni_time_table tbody').append(
'<tr>'
+'<td class="center hidden" id="'+result[i].rec_id+'">' + result[i].rec_id + '</td>'
+'<td class="center">' + result[i].uni_id + '</td>'
+'<td>' + result[i].uni_name + '</td>'
+'<td>' + result[i].uni_loc + '</td>'
+'<td class="center">' + result[i].uni_date + '</span></td>'
+'<td class="center">' + result[i].uni_start_time + '</td>'
+(result[i].uni_end_time == null ?
'<td class="center"></td>' //this will always be empty if the uni_end_time is not set.
:
'<td class="center">' + result[i].uni_end_time + '</td>'
)
+(result[i].uni_end_time == null ?
'<td class="center" id="on_going_'+result[i].rec_id+'"></td>' //the timer will only be triggered here if the uni_end_time is not set.
:
'<td class="center">' + result[i].uni_total_time + '</td>' //this will display the total time as long as the uni_end_time is set.
)
+'</tr>');
}
}
});
});
</script>
So far, only the first entry in the table displays the timer. Every time I add another entry, that second entry just remains blank while the timer still works with the first entry.
How can I make the timer work for each row on the table?
EDIT: Sample Data from json
rec_id "1"
uni_date "2016-10-28"
uni_loc "Custom Location"
uni_id "2356"
uni_name "Custom Name"
uni_start_time "10/28/2016 09:04:28"
uni_end_time null
uni_total_time null // this shows null because end_time is empty which is when the timer should kick in.
Here is a solution for you with little modifications of your code:
var startStamp = [];
function updateTimer(result) {
var newDate = new Date();
var newStamp = newDate.getTime();
for (var j = 0; j < result.length; j++) {
newDate = new Date();
newStamp = newDate.getTime();
var diff = Math.round((newStamp-startStamp[j])/1000);
var days = Math.floor(diff/(24*60*60));
diff = diff-(days*24*60*60);
var hours = Math.floor(diff/(60*60));
diff = diff-(hours*60*60);
var minutes = Math.floor(diff/(60));
diff = diff-(minutes*60);
var seconds = diff;
days = (String(days).length >= 2) ? days : '0' + days;
hours = (String(hours).length >= 2) ? hours : '0' + hours;
minutes = (String(minutes).length >= 2) ? minutes : '0' + minutes;
seconds = (String(seconds).length >= 2) ? seconds : '0' + seconds;
$("#on_going_"+result[j].rec_id).html(hours+':'+minutes+':'+seconds);
}
}
$('document').ready(function()
{
var uni_id = 1;//
$.ajax({
type : 'POST',
url : 'get_time.php',
dataType: 'json',
data : {uni_id: uni_id},
cache: false,
success : function(result) {
for (var i = 0; i < result.length; i++) {
var startDateTime = new Date(result[i].uni_start_time);
startStamp[i] = startDateTime.getTime();
$('#uni_time_table tbody').append(
'<tr>'
+ '<td class="center hidden" id="' + result[i].rec_id + '">' + result[i].rec_id + '</td>'
+ '<td class="center">' + result[i].uni_id + '</td>'
+ '<td>' + result[i].uni_name + '</td>'
+ '<td>' + result[i].uni_loc + '</td>'
+ '<td class="center">' + result[i].uni_date + '</span></td>'
+ '<td class="center">' + result[i].uni_start_time + '</td>'
+ (result[i].uni_end_time == null ?
'<td class="center"></td>' //this will always be empty if the uni_end_time is not set.
:
'<td class="center">' + result[i].uni_end_time + '</td>'
)
+ (result[i].uni_end_time == null ?
'<td class="center" id="on_going_' + result[i].rec_id + '"></td>' //the timer will only be triggered here if the uni_end_time is not set.
:
'<td class="center">' + result[i].uni_total_time + '</td>' //this will display the total time as long as the uni_end_time is set.
)
+ '</tr>');
}
setInterval((function () {
updateTimer(result);
}), 1000);
}
});
});

AJAX not overwriting global variable JQUERY

$.each(data, function (index, info) {
var a = info.notes;
var b = info.permission;
//var c = null;
var c = null;
$.ajax({
url: "assets/getExpiration.php?expiry=" + info.expiration,
type: "GET",
dataType: "text"
}, function(data){
c = data;
});
var z = null;
switch(info.stars) {
case 0: z = "<img src='assets/img/0star.png'/>"; break;
case 1: z = "<img src='assets/img/1star.png'/>"; break;
case 2: z = "<img src='assets/img/2star.png'/>"; break;
case 3: z = "<img src='assets/img/3star.png'/>"; break;
default: z = "<label class='label label-danger'>" + c + "</label>"; break;
}
var notes = a.length > 0 ? "<i class='fa fa-file'></i>" : "";
var permission = b.length > 0 ? "<i class='fa fa-warning'></i>" : "";
if (info.status == 'EXPIRED') {
$("#pendingCall" + info.callNum).append("<button onclick=\"loadPlayer('" + info.playerTag+ "', '" + info.status + "', "+ info.callNum +")\"class='btn btn-danger disabled'>" + info.username + " " + permission + " " + notes + "</button>");
} else {
$("#pendingCall" + info.callNum).append("<button onclick=\"loadPlayer('" + info.playerTag+ "', '" + info.status + "', "+ info.callNum +")\"class='btn btn-primary'>" + info.username + " " + permission + " " + notes + "<br> " + z + "</button>");
}
});
c is not being edited. HOWEVER when I console.log(c) inside the $.ajax() it gives me the proper value. However when I console.log() outside of the $.ajax() it gives me 'null'. I've looked up MANY MANY MANY MANY stackoverflow similar questions but all the answers did not work or maybe I was just missing something.
Are you assuming that the code from:
var z = null;
switch(info.stars) {....
will wait for your ajax request to complete? If so, that's not quite how it works.
Ajax is going to fire of a request asynchronously whilst the rest of your code continues to execute (assuming you don't specify it should run synchronously <-- that's not a good idea though).
If you want to work with values returned by AJAX you need to add this code to the ajax options success property or similar which will be executed when it completes.
$.ajax is an asynchronous method that instantly returns, but will run the success and error functions after the HTTP request is completed in the background.
You will need to move your code into it's own function that is called inside the $.ajax method. Below is an example.
$.ajax({
url: "assets/getExpiration.php?expiry=" + info.expiration,
type: "GET",
dataType: "text"
}, function (data) {
c = data;
var z = null;
switch(info.stars) {
case 0: z = "<img src='assets/img/0star.png'/>"; break;
case 1: z = "<img src='assets/img/1star.png'/>"; break;
case 2: z = "<img src='assets/img/2star.png'/>"; break;
case 3: z = "<img src='assets/img/3star.png'/>"; break;
default: z = "<label class='label label-danger'>" + c + "</label>"; break;
}
var notes = a.length > 0 ? "<i class='fa fa-file'></i>" : "";
var permission = b.length > 0 ? "<i class='fa fa-warning'></i>" : "";
if (info.status == 'EXPIRED') {
$("#pendingCall" + info.callNum).append("<button onclick=\"loadPlayer('" + info.playerTag+ "', '" + info.status + "', "+ info.callNum +")\"class='btn btn-danger disabled'>" + info.username + " " + permission + " " + notes + "</button>");
} else {
$("#pendingCall" + info.callNum).append("<button onclick=\"loadPlayer('" + info.playerTag+ "', '" + info.status + "', "+ info.callNum +")\"class='btn btn-primary'>" + info.username + " " + permission + " " + notes + "<br> " + z + "</button>");
}
});

Option list showing undefined values on ajax output

this is my code to show values in list box.
$.ajax({
type: "POST",
data: queryvalue,
url: "inputaction.php",
success: function (data) {
switch (action) {
case "GetMake":
console.log(data);
var select = $("#promake");
select.empty();
for (var i = 0; i < data.length; i++)
{
select.append('<option value="' + data[i].id + '">' + data[i].make + '</option>');
}
break;
}
}
});
i get the result of lot of undefined values in select field. and i have attached an console result in image file, in console output is correct how to rectify this problem.
Console Output
Page Output
$type = mysqli_real_escape_string($conn, $_POST['type']);
$make = mysqli_real_escape_string($conn, $_POST['make']);
$query = "select * from assetmodel where typeid = '".$type."' AND makeid = '".$make."' ORDER by model ASC";
$result = RunQuery($query, $conn);
while($row = mysqli_fetch_array($result)){
$re = array(
'id' => $row['id'],
'model' => $row['model']
);
}
echo json_encode($re);
this is my action page
You have to use "JSON.parse":
var select = $("#promake");
select.empty();
var parse = JSON.parse(json);
for (var i = 0; i < parse.length; i++)
{
select.append('<option value="' + parse[i].id + '">' + parse[i].make + '</option>');
}
decode the json in success
success: function (data) {
var data = $.parseJSON(data);
switch (action) {
case "GetMake":
console.log(data);
var select = $("#promake");
select.empty();
for (var i = 0; i < data.length; i++)
{
select.append('<option value="' + data[i].id + '">' + data[i].make + '</option>');
}
break;
}
}
You have to specify the dataType as json
$.ajax({
type: "POST",
data: queryvalue,
url: "inputaction.php",
dataType: "json",
success: function (data) {
switch (action) {
and set the MIME type of your response to application/json before sending the data:
header('Content-Type: application/json');
echo json_encode($re);
Simple fix in client-side is as below. Just a condition check inside your loop.
for (var i = 0; i < data.length; i++)
{
if (typeof data[i].id != "undefined" && typeof data[i].make != "undefined" ) {
select.append('<option value="' + data[i].id + '">' + data[i].make + '</option>');
}
}
If you want to have clean data from DB itself, you have to repair your query. That will eliminate the root cause.

Categories