I have this PHP Array:
Array
(
[messages] => Array
(
[0] => Array
(
[sender] => 17
[receiver] => 4
[message] => TEST 2
[timestamp] => 1367200891
[read] => 0
)
[1] => Array
(
[sender] => 17
[receiver] => 4
[message] => TEST 1
[timestamp] => 1367197661
[read] => 0
)
)
[new_messages] => 2
)
It gets retrieved via an Ajax Request, using json_encode() to output it in PHP.
function getMessages(rec){
var nmsg = $.ajax({
type: "GET",
async: true,
url: "/ps/getUserMessages.php",
data: {'u':rec,'s00':s00,'n01':n01,'t02':t02}
});
nmsg.done(function(data) {
var json = JSON.parse(data);
if (typeof json.messages[0].message !== 'undefined') {
printMessage(json);
}
});
}
And as printMessage() function, for example, i need to do something like:
loop(){
$("#elem").append(
'<div>Sender: '+arrayOfValues.sender+'</div>'
+'<div>Message: '+arrayOfValues.message+'</div>'
);
}
for each Array of values.
I tried jQuery $.each() and also for() with some examples i found, but i cannot get to work.
asked Apr 30, 2013 at 7:18
Fr0z3n
1,5801 gold badge18 silver badges40 bronze badges
2 Answers 2
If you want to iterate over given structure you should use use following as a printMessage:
function printMessage( json ){
for ( var i in json.messages ) {
var currentMessage = json.messages[i];
$("#elem").append(
'<div>Sender: '+currentMessage.sender+'</div>'
+'<div>Message: '+currentMessage.message+'</div>'
);
}
}
answered Apr 30, 2013 at 7:22
Marek Lewandowski
3,4111 gold badge23 silver badges27 bronze badges
Sign up to request clarification or add additional context in comments.
3 Comments
Andreas
Don't use
for(var i in ...) for arrays. It's for objects and nothing else.casraf
So this answer is a suitable solution for this case (reference: w3schools.com/js/js_loop_for.asp)
Andreas
@henasraf Better use MDN as a reference instead of w3schools. Why? Have a look at w3fools.com - developer.mozilla.org/en-US/docs/JavaScript/Reference/…
Something like this should work:
function printMessage(data) {
for( var i=0; i<data.messages.length; i++ ) {
$("#elem").append(
'<div>Sender: ' + data.messages[i].sender + '</div>'
+'<div>Message: ' + data.messages[i].message+ '</div>'
);
}
}
answered Apr 30, 2013 at 7:22
Sirko
74.3k19 gold badges157 silver badges194 bronze badges
Comments
default
dataType: 'json'and then use the onsuccess function success: function(data){ and you can reference your array as just data["column"] etc so you don't have to mess around parsing json etc you can just directly loop it out. you can remove at least 7 lines of code from your overall code.