Unmecparla
Unmecparla

Reputation: 39

Get all files in directory json

I want get all files json in my directory for search into it.

  $('#get-data').click(function () {
    var showData = $('#show-data');

    $.getJSON('/data/**all files json**', function (data) {
      console.log(data);

      var items = data.items.map(function (item) {
        return item.key + ': ' + item.value;
      });

      showData.empty();

      if (items.length) {
        var content = '<li>' + items.join('</li><li>') + '</li>';
        var list = $('<ul />').html(content);
        showData.append(list);
      }
    });

    showData.html(data);
  });

Do you think its possible or i need use other method ?

Thx

Upvotes: 2

Views: 3350

Answers (2)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038770

You cannot make a wildcard AJAX request that will return all the possible JSON files on your server. You need to know in advance the exact endpoint that you will be sending your request to. Otherwise it would be a security vulnerability if all clients could know in advance what files are available on the server.

So one possible strategy here would be to have some /describe endpoint on your server which will return a list of all available JSON files. Then the client will first make an AJAX request to this endpoint and then for each returned endpoint in the list it will make a separate AJAX request:

$.getJSON('/data/discover', function (data) {
    // suppose that data looks like this:
    // ["/data/a.json", "/data/b.json", "/data/c.json"]
    for (var i := 0; i < data.length; i++) {
        // send an AJAX request to each individual JSON file
        // available on the server as returned by the discover endpoint
        $.getJSON(data[i], function (result) {
            ...
        });
    }
});

Upvotes: 2

Yaser
Yaser

Reputation: 5719

Basically you can't request for multiple files by one request.

However the scenario is perfect fit for async.parallel:

var async = require('async');
app.get('/json', function(req, res) {
  var work = {
    file01: async.apply(fs.readFile, __dirname + '/file01.json'),
    file02: async.apply(fs.readFile, __dirname + '/file02.json')
  };
  async.parallel(work, function (error, results) {
    if (error) {
      res.status(500).send(error);
      return;
    }
    //might need string->Object here
    results['file01'] = JSON.parse(results['file01']);
    results['file02'] = JSON.parse(results['file02']);
    res.send(results);
  });
});

Upvotes: 1

Related Questions