skiwi
skiwi

Reputation: 69379

JQuery access some JSON data

I've been working on this for like an hour now, but can't seem to figure it out.

The JSON response:

{"lastDate":"2013-11-22 00:00:35",
"lastId":"42460",
"response":[
{
"class":"rowgreen",
"id":"42460","date":"22 November 2013, 00:00:35\\u0026nbsp;",
"player":"\\u003Ca href=\\u0027logpersonal.php?playerName=skiwi2\\u0027\\u003Eskiwi2\\u003C\/a\\u003E\\u0026nbsp;",
"target":"\\u003Ca href=\\u0027logpersonal.php?playerName=UnholiestElite\\u0027\\u003EUnholiestElite\\u003C\/a\\u003E\\u0026nbsp;",
"weapon":"M1014 (\\u003Cb\\u003EHeadshot\\u003C\/b\\u003E)\\u0026nbsp;",
"server":"Test\\u0026nbsp;"
}
]}

This seems to be correct, now the jquery:

function longPolling() {
    if (!longPollingAllowed) {
        return;
    }
    console.log("Long polling started.");
    $.ajax({
        url: "logpersonal_ajax.php",
        data: {
            serverId: serverId,
            playerName: playerName,
            lastDate: lastDate,
            lastId: lastId
        },
        cache: false,
        dataType: "json",
        beforeSend: function() {
            longPollingBusy = true;
        },
        success: function(json) {
            console.log("success");
            $(json).each(function() {
                console.log("this.lastDate = " + this.lastDate);
                console.log("this.lastId = " + this.lastId)
                console.log("this.response = " + this.response);
                console.log(this.response);
                this.lastDate = this.lastDate;
                this.lastId = this.lastId;
                if (this.response != "") {
                    this.response.each(new function() {
                        console.log(this);
                        var clazz = this.class;
                        console.log("clazz = " + clazz);
                        var id = this.id;
                        var date = this.date;
                        var player = this.player;
                        var target = this.target;
                        var weapon = this.weapon;
                        var server = this.server;
                        var string = "\t\t\t<tr class='" + clazz + "' id='" + id + "'><td>" + date + "</td><td>" + player + "</td><td>" + target + "</td><td>" + weapon + "</td><td>" + server + "</td></tr>\n";
                        console.log("string = " + string);
                        $(string).insertBefore($("#list tr.header").next());               
                    });
                }
            });
            if (lastDate != "" && lastId != "") {
                //longPolling(serverId, playerName, lastDate);
            }
            longPollingBusy = false;
        },
        error: function(json, message) {
            console.log("fail: " + message);
            longPollingBusy = false;
        }
    });    
}

The console.log("this.lastDate = " + this.lastDate); works, so does the one for this.lastId. this.response also works and nicely shows an array starting with index 0 and when expanded it you can see all elements in the developer view.

Now comes the part I cannot seem to understand: At the foreach over this.response it does not print anything useful (except Prototype skeleton) for this.

How can I access the values?

Upvotes: 0

Views: 68

Answers (1)

gen_Eric
gen_Eric

Reputation: 227310

this.response.each(new function() {

This line is wrong. It should be:

this.response.forEach(function() {

P.S. I suggest doing $.each(json, function(){ instead of $(json).each(function() {.

Upvotes: 3

Related Questions