8

I'm just starting to use javascript and json.

I need to read data (getInformation function) from a json file when processing an event in a javascript function. So I need it to be synchronic. I don't know if I am missing something in the code, or if I have to create an Request and handle the callback, or if I need to import additional javascript to use json. Because I don't know how to make it work. It doesn't work because at the end the array is empty. Any help is aprreciated.

The json file:

{"Users": [
    {"Name": "Jane",
        "Points": 67,
        "age": 23},
    {
        "Name": "Sam",
        "Points": 65,
        "age": 21}
]} 

Option 1 - Function called by another function which is processing an event:

var getInformation = function() 
{
    var path = "./data/users.json";
    var informationArray= [];
    console.log("Loading ....");
    $.getJSON(path, function(data) 
    {
        $.each(data, function(key, val) 
        {
            informationArray.push(key + '-' + val);
        });
    }); 
    return informationArray; 
}

Option 2 - Function called by another function which is processing an event:

var getInformation = function() { 
var path = "./data/users.json";
var informationArray= [];
$.ajax({
         url: path,
         async: false,
         dataType: 'json',
         success: function(response) {
         $.each(response.items,
         function(item) {
         informationArray.push(item);
         });
         informationArray.push("success");
         }
         }); 
   return informationArray; }

I have seen the following thread and tried what is there but doens't work for me. I would like to know where is the problem in my code or if require any special configuration.

Thread: Is there a version of $getJSON that doesn't use a call back?

6
  • what is the question? what isn't working? Commented Apr 29, 2013 at 21:20
  • When you say you are trying to parse a local file, do you mean on the client or server? If it's on the server, you need to use the URL to the file instead of a path. Commented Apr 29, 2013 at 21:22
  • Is the JSON being dynamically generated, or is it coming from a .json file? Because JSON is simply JavaScript, it can also be loaded in the same way a script is, and stored in local memory for interaction. Just a thought. Commented Apr 29, 2013 at 21:28
  • The question is where are the mistakes, because the array in which I intend to include the data of the json file is empty at the end of the function. I mean parse or access to the elements of the json file. It is not dynamic, is fixed information. The local json file in the server yes, how should I specify the url? Nice, how can I load a script to store it dynamically, it doesn't causes efficiency problems? Commented Apr 29, 2013 at 21:30
  • I don't really see why the request would need to be synchronous. Server communication always should be async. Commented Apr 29, 2013 at 21:44

2 Answers 2

6

When JavaScript is running in a browser it needs to make an AJAX request to the server to access a JSON file. It is possible to write the AJAX request by hand but that is complex and difficult to make work in all browsers. Instead most people use a library like jQuery. You will need to include jQuery in your web page with something like:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>

Then in any script tag lower in the html page you should be able to do something like:

$.ajax({
  url: "data/users.json",
  dataType: "json",
  success: function(response) {
    $.each(response.Users, function(item) {
      informationArray.push(item);
    });
    informationArray.push("success");
  }
});

see http://api.jquery.com/jQuery.ajax/

Sign up to request clarification or add additional context in comments.

2 Comments

I'm using - //ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js - jquery-ui-1.8.17.custom.min.js Changing to 1.9.1/ dissable the rest funcions. Could this be the cause of having the array empty? Thanks.
Unlikely. It might be that you are getting an empty array because your JSON object has no 'items' property. It looks like you want the 'Users' property.
0

To load a JSON file (and not require a callback) you'd use:

var url = 'http://yoursite.com/data/users.json';
var j = [];
$.ajax({
  type: 'GET',
  url: url,
  dataType: 'json',
  success: function(data) { j = data;},
  async: false
});

alert(j.Users[0].Name);

9 Comments

Thanks. I'm getting now this error. Uncaught TypeError: Cannot read property '0' of undefined. By the way, is there a way to set the url dynamically?
It is not working, the j array is empty. Do I need to configure some additional library or something?
Yes, you can set the URL dynamically, you'd just make it a var like in your 'option 2' above. What URL are you using? If you enter it in a browser, the JSON should display.
As I'm testing in the workstation and I'm using Netbeans the URL i wrote is localhost:8383/Project/data/users.json
Does that URL load the JSON file when you put it in firefox or whatever browser you use?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.