Wes
Wes

Reputation: 281

how to read jquery ajax returned object with out a loop

Given the following jquery ajax request:

$.getJSON("getSearchSystems.php", {level: "full", data:this.label}, function(data){
     //This method does not work.
     console.log(data.regionName);
     console.log(data.constellationName);
     console.log(data.solarSystemName);

     //This method does work
     $.each(data, function (i, elem) {
        console.log(elem.regionName);
        console.log(elem.constellationName);
        console.log(elem.solarSystemName);
    });

});

Output:

undefined
undefined
undefined
The Bleak Lands
Sasen
Kuomi

JSON response from PHP script

[{"regionName":"The Bleak Lands","constellationName":"Sasen","solarSystemName":"Kuomi"}]

I cannot seem to figure out how to access this objects data with out iterating over it. Is there not a way to do this without a loop?

I would like to be able to access the data like var regionName = data.regionName

Upvotes: 1

Views: 780

Answers (3)

Rafay
Rafay

Reputation: 31033

try

 console.log(data[0].regionName);

just dont ask why but some times the data is returned as array and is to be accessed like data[0]

Upvotes: 2

denolk
denolk

Reputation: 770

Does your request always return json object array like your json dump?

If so, you always get undefined when you call console.log(data.regionName); without iteration since your raw data is an array and you try to reference json array's undefined property.

However, if you are trying to check for a specific value like error checking value, results count, or some other value relevant with your business; you have to response with an object that contains your data array among with the other values you needed. Like this;

{"object1":"value1", "object2":[{"regionName":"The Bleak Lands","constellationName":"Sasen","solarSystemName":"Kuomi"}]}

Upvotes: 0

Darin Dimitrov
Darin Dimitrov

Reputation: 1038790

If you want to loop your server needs to send an array, like this:

[ { regionName: 'r1', constellationName: 'c1', solarSystemName: 's1' }, 
  { regionName: 'r2', constellationName: 'c2', solarSystemName: 's2' } ]

Looking at those undefined values that your are getting I suspect that the first element of this array doesn't contain any regionName, constellationName and solarSystemName properties and it looks something like this:

[ { someIrrelevantProperty: 'foo bar', someOtherirrelevantProperty: 'baz' }, 
  { regionName: 'The Bleak Lands', constellationName: 'Sasen', solarSystemName: 'Kuomi' } ]

Upvotes: 1

Related Questions