Ajax is not working in Webix

I am trying my first webix programm. I follow the get start document. As per the document I place my code in HTML page and two json file. Here is my complete code.

<!DOCTYPE HTML>
<html>

<head>
  <link rel="stylesheet" href="../webix_v4.2.4_pro/codebase/webix.css" type="text/css">
  <script src="../webix_v4.2.4_pro/codebase/webix.js" type="text/javascript"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  <style>
    #app_here {
      width: 1000px;
      height: 400px, margin: 200px;
    }
  </style>
</head>

<body>
  <div id="app_here"></div>

  <script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
      $.ajax({
        url: "grid_data.json",
        success: function(result) {
          debugger;
        }
      });
    });
    $(document).ready(function() {
      $.ajax({
        url: "tree_data.json",
        success: function(result) {
          debugger;
        }
      });
    });

    webix.ready(function() {
      webix.ui({
        container: "app_here",
        view: "layout",
        rows: [{
          type: "header",
          template: "My App!"
        }, {
          cols: [{
            view: "tree",
            id: "mytree",
            gravity: 0.3,
            select: true,
            data: tree_data
          }, {
            view: "resizer"
          }, {
            view: "datatable",
            id: "mydatatable",
            autoConfig: true,
            data: grid_data
          }]
        }]
      });
      $$("mytree").open(1);
      $$("mytree").open(2);
      $$("mydatatable").select(1);
    });
  </script>

</body>

</html>

My page is loading but one error

Uncaught ReferenceError: tree_data is not defined

Also page is not oading. Am I missing anything in ajax or something. Can anybody please help me in this.

If you need I will place my json data also.

My tree_data.json

[
  { id: "1", 
    type: "folder", 
    value: "Music", 
    css:"folder_music", 
    data:[{
            id : 6,
            type: "folder", 
            value: "Music", 
        },{
            id : 3,
            type: "folder", 
            value: "Music", 
        },{
            id : 4,
            type: "folder", 
            value: "Music", 
        },{
            id : 5,
            type: "folder", 
            value: "Music", 
        }]
 },{ id: "2", 
    type: "folder", 
    value: "Music", 
    css:"folder_music", 
    data:[{
            id : 7,
            type: "folder", 
            value: "Music", 
        },{
            id : 8,
            type: "folder", 
            value: "Music", 
        },{
            id : 9,
            type: "folder", 
            value: "Music", 
        },{
            id : 10,
            type: "folder", 
            value: "Music", 
        }]
 }
]

My grid_data.json

[
  { id:1, title:"The Shawshank Redemption", year:1994, votes:678790, rating:9.2, rank:1},
  { id:2, title:"The Godfather", year:1994, votes:678790, rating:9.2, rank:1},
  { id:3, title:"The Godfather part : 2", year:1994, votes:678790, rating:9.2, rank:1},
  { id:4, title:"The good, the bad and the Ugly ", year:1994, votes:678790, rating:9.2, rank:1},
  { id:5, title:"My Fair Lady", year:1994, votes:678790, rating:9.2, rank:1},
  { id:6, title:"12 Angery Man", year:1994, votes:678790, rating:9.2, rank:1}
]

Answers 1

  • I'm assuming tree_data is the json data you're trying to get with the ajax request. You need to return the data or store it somewhere for later use. In the code you have, you have not defined tree_data or grid_data. Try getting the data similar to how its done here:

    <!DOCTYPE HTML>
    <html>
    
    <head>
      <link rel="stylesheet" href="http://cdn.webix.com/edge/webix.css" type="text/css">
      <script src="http://cdn.webix.com/edge/webix.js" type="text/javascript"></script>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    
    </head>
    
    <body>
      <div id="app_here"></div>
    
      <script type="text/javascript" charset="utf-8">
        var gridData = (function() {
          var grid_data;
          $.ajax({
            url: "grid_data.json",
            success: function(result) {
              grid_data = result;
              console.log(grid_data);
            }
          });
    
          return {
            getData: function() {
              if (grid_data) return grid_data;
            }
          }
        })();
    
        var treeData = (function() {
          var tree_data;
          $.ajax({
            url: "tree_data.json",
            success: function(result) {
              tree_data = result;
              console.log(tree_data);
            }
          });
    
          return {
            getData: function() {
              if (tree_data) return tree_data;
            }
          }
        })();
    
        webix.ready(function() {
          webix.ui({
    
            container: "app_here",
            view: "layout",
            rows: [{
              type: "header",
              template: "My App!"
            }, {
              cols: [{
                view: "tree",
                id: "mytree",
                gravity: 0.3,
                select: true,
                data: treeData.getData() // get your tree_data
              }, {
                view: "resizer"
              }, {
                view: "datatable",
                id: "mydatatable",
                autoConfig: true,
                data: gridData.getData() // get your grid_data
              }]
            }]
    
          });
          $$("mytree").open(1);
          $$("mytree").open(2);
          $$("mydatatable").select(1);
        });
      </script>
    
    </body>
    
    </html>

    The JSON you have isn't loading because it isn't valid json; the keys need to be strings like this:

    tree_data

    [{
      "id": "1",
      "type": "folder",
      "value": "Music",
      "css": "folder_music",
      "data": [{
        "id": 6,
        "type": "folder",
        "value": "Music"
      }, {
        "id": 3,
        "type": "folder",
        "value": "Music"
      }, {
        "id": 4,
        "type": "folder",
        "value": "Music"
      }, {
        "id": 5,
        "type": "folder",
        "value": "Music"
      }]
    }, {
      "id": "2",
      "type": "folder",
      "value": "Music",
      "css": "folder_music",
      "data": [{
        "id": 7,
        "type": "folder",
        "value": "Music"
      }, {
        "id": 8,
        "type": "folder",
        "value": "Music"
      }, {
        "id": 9,
        "type": "folder",
        "value": "Music"
      }, {
        "id": 10,
        "type": "folder",
        "value": "Music"
      }]
    }]
    

    grid_data

    [{
      "id": 1,
      "title": "The Shawshank Redemption",
      "year": 1994,
      "votes": 678790,
      "rating": 9.2,
      "rank": 1
    }, {
      "id": 2,
      "title": "The Godfather",
      "year": 1994,
      "votes": 678790,
      "rating": 9.2,
      "rank": 1
    }, {
      "id": 3,
      "title": "The Godfather part : 2",
      "year": 1994,
      "votes": 678790,
      "rating": 9.2,
      "rank": 1
    }, {
      "id": 4,
      "title": "The good, the bad and the Ugly ",
      "year": 1994,
      "votes": 678790,
      "rating": 9.2,
      "rank": 1
    }, {
      "id": 5,
      "title": "My Fair Lady",
      "year": 1994,
      "votes": 678790,
      "rating": 9.2,
      "rank": 1
    }, {
      "id": 6,
      "title": "12 Angery Man",
      "year": 1994,
      "votes": 678790,
      "rating": 9.2,
      "rank": 1
    }]
    

    If this isn't the solution for you the problem you should look into is making sure you get the data tree_data and grid_data into the scope of your webix.ready(). Hope this helps.


Related Articles