2017-01-15 3 views
1

Ich möchte alle Dateien JSON in meinem Verzeichnis für die Suche in es.Holen Sie alle Dateien in Verzeichnis JSON

$('#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); 
    }); 

Denken Sie, seine mögliche oder ich brauche andere Methode verwenden?

Thx

+0

Haben Sie Fehler haben? Warum funktioniert nicht? –

+0

mit single test.json Datei Ich habe keinen Fehler, aber wenn ich versuche, alle JSON-Dateien in meinem Verzeichnis zu hören,/data/403 (Forbidden) – Unmecparla

Antwort

1

Sie können keine Platzhalter AJAX Antrag stellen, die alle möglichen JSON-Dateien auf dem Server zurück. Sie müssen den genauen Endpunkt, an den Sie Ihre Anfrage senden, im Voraus wissen. Andernfalls wäre es eine Sicherheitslücke, wenn alle Clients im Voraus wissen könnten, welche Dateien auf dem Server verfügbar sind.

Eine mögliche Strategie wäre also ein /describe Endpunkt auf Ihrem Server, der eine Liste aller verfügbaren JSON-Dateien zurückgibt. Dann wird der Kunde zuerst eine AJAX-Anforderung an diesen Endpunkt machen und dann für jeden Endpunkt in der Liste zurückgegeben es einen separaten AJAX-Request machen:

$.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) { 
      ... 
     }); 
    } 
}); 
+0

ich denke, verwenden Sie diese Methode, Thx – Unmecparla

1

Grundsätzlich kann man nicht von einer Anfrage für mehrere Dateien anfordern.

jedoch das Szenario ist perfekt für die 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); 
    }); 
}); 
Verwandte Themen