2016-06-17 16 views
0

Ich habe eine Polymer-Paketstruktur aus der App-Schublade-Vorlage, mit einem Ordner namens src. In diesem Ordner habe ich eine Datei namens entries.json. Ich versuche herauszufinden, wie Elemente zu diesem JSON-Objekt hinzugefügt werden, wenn ein Benutzer Formulardaten aus einem Papierdialogfeld sendet. Ich verstehe, wie man die Werte von diesem Formular bekommt. Ich kann nicht herausfinden, wie ich den Inhalt aus der JSON-Datei holen und ein neues Element zu diesem JSON hinzufügen und dann das neue Element wieder in die JSON-Datei schreiben kann.In JSON-Datei in Javascript schreiben

hier ist meine Form:

<paper-dialog id="applynow" entry-animation="scale-up-animation" exit-animation="fade-out-animation"> 
     <paper-dialog-scrollable> 
     <img src="/images/logo.png" width="80%" height="auto" style="margin: 0 auto;"/> 
     <paper-input id="name" label="Full Name"></paper-input> 
     <paper-input id="phone" label="Phone Number"></paper-input> 
     <paper-input id="email" label="Email"></paper-input> 
     <paper-textarea id="desc" label="Why Pick You?" char-counter maxlength="400"></paper-textarea> 
     <paper-button on-click="submitForm">Submit</paper-button> 
     </paper-dialog-scrollable> 
     </paper-dialog> 

Und hier ist die javascript:

submitForm: function() { 
     var data = JSON.parse("/src/entries.json"); 
     data.entries.push({ 
      name: this.$.name.value, 
      phone: this.$.phone.value, 
      email: this.$.email.value, 
      desc: this.$.desc.value 
     }); 
     data = JSON.stringify(data); 
     } 

ich versucht haben, aber ich aus der Chromkonsole sehen, dass, wenn ich JSON.parse() es erwartet, dass die Eingabe eine json-formatierte Zeichenfolge ist und kein Dateipfad. Gibt es eine Möglichkeit, aus dieser Datei zu lesen und dann in Javascript zurück zu schreiben? Diese Datei wird nicht im Speicher des Benutzers, sondern nur in meiner Paketstruktur gespeichert.

EDIT:

Dank chrisv ich in der Lage war, meine Json zu lesen und anhängen, aber ich brauche noch einen Weg, um diese JSON-Datei neu zu schreiben. Hier ist meine neue JavaScript-Funktion, die erfolgreich meine JSON-Datei greifen wird, einen neuen Eintrag hinzufügen und dann in der Konsole anzeigen. Gibt es eine einfache Möglichkeit, diese .json-Datei mit der neuen Zeile neu zu schreiben?

submitForm: function() { 
     var newName = this.$.name.value; 
     var newPhone = this.$.phone.value; 
     var newEmail = this.$.email.value; 
     var newDesc = this.$.desc.value; 
     var json = $.getJSON("src/entries.json", function(data) { 
      data.entries.push({ 
      name: newName, 
      phone: newPhone, 
      email: newEmail, 
      desc: newDesc 
      }); 
      console.log(data); 
     }); 
     } 
+1

Sie würden einen Service benötigen, die die neuen Einträge nimmt und speichert sie in der Datei . Da sie nicht im Speicher des Benutzers sind, gibt es keine Möglichkeit, auf sie zu schreiben, außer über den Server. Vielleicht möchten Sie überdenken, wie Sie die Datei erhalten und speichern. –

+0

Ich entschied mich, mit dem Weg des Umdenkens zu gehen, wie ich diese Information speichern kann. Ich habe bereits Firebase für das Hosting verwendet, also ging ich einfach mit dem Firebase-Datenspeicher. –

Antwort

0

Das liegt daran, dass JSON Parse erwartet, dass eine Zeichenfolge oder eine andere Eingabe analysiert wird, NOT ein Dateipfad, der geladen und dann analysiert werden soll.

Ich empfehle, jQuery (oder etwas anderes, wenn Sie es bevorzugen), um die Datei zu laden.

Dann können Sie tun:

$.getJSON("file/path/entries.json", function(data) { 
    //Data loaded here 
    //Do whatever you want with the data 
} 
.fail(function(){ 
    //Handle error with reading json file here 
}); 

Sie getJSON() hier mehr über jQuery lesen: http://api.jquery.com/jquery.getjson/

HINWEIS: Da nicht nativ JavaScript Querverweis Abfragen (Same Origin Policy) erlauben, werden Sie muss es auf einem Server ausführen oder einen lokalen Server simulieren. I.e. Führen Sie es auf andere Weise durch MAMP oder localhost. Lesen Sie mehr über sie in der zuvor verknüpften URL und hier: https://en.wikipedia.org/wiki/Same-origin_policy

Edit: Gefunden ein vorher beantwortet Post, die auf Ihr Problem beziehen: https://stackoverflow.com/a/19473929/4315724

+0

Hey ich schätze die Antwort, aber ich muss diese .json Datei mit dem neuen Eintrag noch neu schreiben. Gibt es eine einfache Möglichkeit, von javascript zurück in diese json-Datei zu schreiben, oder würde dies PHP oder eine andere Sprache benötigen, um dies zu vervollständigen? Ich habe meinen Beitrag mit meinen Javascript-Änderungen wie von Ihnen angegeben bearbeitet. –

+0

Es ist wichtig zu beachten, dass JavaScript eine Client-seitige Sprache ist, die sich NICHT mit serverseitigen Datenquellen befassen sollte ... Um Ihre json-Datei zu aktualisieren, sollten Sie Ihre Datenquelle auf einem Server mit einem REST verbinden/hosten API, um Updates auf diese Weise zu veröffentlichen, ODER Sie könnten eine serverseitige (PHP) Lösung erstellen, um Ihre eigene "post" -Methode für die json-Datei zu erstellen.Vielleicht kann die Antwort hier Ihnen helfen: http://stackoverflow.com/a/20948680/4315724 – chrisv

+0

Die Antworten werden sehr geschätzt, und ich habe gelesen und verstehe die Logik ein wenig mehr jetzt. Ich gehe jetzt mit einem Datenspeicherdienst, der die Dinge erleichtern wird. Trotzdem wird die Hilfe immer geschätzt –

Verwandte Themen