Struggling to load json from file (myData.json) on URL into an object so I can access property values.
— The data loads immediately, I need it a lot in the app.
— I’m going to access the data throughout the app, not just as part of one function that happens immediately after the data loads.
— I’ve ensured the data in my file is properly formatted json.
Following the example on the jquery API, shouldn’t I be able to do something simple like:
alert(jqxhr.myProperty);
and get the value? What step am I missing here? I’ve tried running eval and a variety of things like
var myObj=JSON.parse(jqxhr);
to no avail.
Please….thank you.
// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON("example.json", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
// perform other work here ...
// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });
I think you are making it too complicated 🙂
the getJSON function automatically converts your response into a proper JSON object. No need to parse.
You mentioned that you are using this data all over the place, so you will have to wait for the ajax call to complete before the data is accesible. That means either wrapping your entire application in the
getJSONcallback. Or using a custom event to determine like so:EDIT
After a quick live debug, the real reason for the data being unavailable was this: javascript that consumes JSON was located in a file include the page document NORTH of inline javascript performing the call. As a result JSON was not a global variable, and scope prevented its usage. If you truly need a variable to be global so it can be used with inline JS as well as any and all included js files, you may do so like this:
EDIT 2
from the comments @mario-lurig