2016-04-06 6 views
0

Ich habe eine .EJS-Datei, die eigentlich eine Dropdown-Formular ist, die Daten mit SQLite3-Datenbank füllt. Nun, was ich tun möchte, ist, wenn ich einen Wert aus dem Dropdown auswählen, ich möchte es zurück zu meiner Javascript-Datei senden, wo ich es in der Datenbank speichern würde.Wie bekomme ich Wert von .ejs zu Javascript-Datei

Normalerweise war dies nicht hart auf eine Select-Anweisung, die ich selbst gemacht, aber wie diese Select-Anweisung aus Javascript gefüllt wird, ist der Wert, undefined, weiß nicht warum.

Um oben auf Beispiel zusammenzufassen:

Ich habe einen Benutzer, der angemeldet ist, und hat dann die Wahl ein Training auf einem Drop-Down zu speichern.

Workout Tisch

ID: 5

Name: Biceps

Ergebnis

Übung

ID: 1

Name: Biceps

Workout-ID: 5

Mein Code

Javascript

var Workout = bookshelf.Model.extend({ 
tableName: 'workout' 
}); 

var Exercise = bookshelf.Model.extend({ 
tableName: 'exercise', 
workout: function() 
{ 
    return this.hasMany(Workout) 
} 
}); 

router.get('/', function (req, res) { 
new Vaje().fetchAll().then(function (workout) { 
    res.render('Exercise', { workout: workout }); 
}).catch(function (error) { 
    console.log(error); 
}); 
}); 

Das alles aus Training der Daten sendet .ejs Tabelle in ausgewählte Form auf .ejs

.ejs Datei

<h2>Select workout</h2> 
<select> 
<% workout.forEach(function(w) { %> 
<option id="" 
<%=w.attributes.id%>"> 
<%= w.attributes.name %> 
</option> 
<% }); %> 
</select> 
<br></br> 
<form method="post"> 
<input type="submit" value="Add workout" /> 
</form> 

JavaScript-Datei

Diese Datei jetzt Wert erhalten ausgewählt sollte und es zu Datenbank speichern ...

router.post('/', function (req, res) { 

var new_workout = req.body; 

console.log("Workout: " + JSON.stringify(new_workout)); 

new Exercise().save(new_workout); 
}); 

Ergebnis aus Konsole

enter image description here

Ich habe keine Ahnung, warum der Wert nicht definiert/leer ist, aber ich würde sicher gerne herausfinden.

Jede Hilfe wird sehr geschätzt!

UPDATE

enter image description here

enter image description here

UPDATE2

enter image description here

SOLUTION

router.post('/', function (req, res) { 
new Vaje({ 'id': parseInt(req.body.naziv) }) 
    .fetch() 
    .then(function (new_workout) { 
     if (new_workout != null) 
      new Trening().save({ 
       vaje_id: new_workout.get("id"), 
       naziv: new_workout.get("naziv") 
      }); 
    }); 
}); 

Antwort

1

Das Problem ist Ihre ejs-Datei. Sie haben die Auswahl aus Ihrem Formular.

<h2>Select workout</h2> 
<form method="post"> 

    <select name="workout"> 
     <% workout.forEach(function(w) { %> 
      <option value="<%=w.attributes.id%>"> 
       <%= w.attributes.name %> 
      </option> 
     <% }); %> 
    </select> 
    <br></br> 

    <input type="submit" value="Add workout" /> 
</form> 

Edit 1 Haben Sie auf Ihre Bewerbung (für Express 3) hinzufügen.

app.use(express.bodyParser()); 

Es ist erforderlich, Postkörper zu verarbeiten.

Edit 2 - Lösung für Express v.4

müssen Sie zuerst

npm install body-parser --save 

später bearbeiten Sie Ihre App zusätzliches Paket installieren:

var express = require('express'); // <- this is your code 
var bodyParser = require('body-parser'); 

var app = express(); // <- this is your code 
app.use(bodyParser.urlencoded({ extended: false })); 

// and now app listen 
app.listen(8888); // <- your port here 

bearbeiten 3

So erhalten Sie den Namen & id. Es wird so etwas sein.

router.post('/', function (req, res) { 
    new Workout({'id': parseInt(req.body.workout)}) 
     .fetch() 
     .then(function(new_workout) { 
      if(new_workout != null) 
       new Exercise().save({ 
        vaje_id: new_workout.get("id"), 
        name: new_workout.get("name") 
       }); 
    }); 
}); 
+0

Versucht dies, aber es sagt immer noch "Erfolg": undefined. Auch ein Datensatz ist auf meine Datenbank festgelegt, aber es ist leer – aiden87

+0

meine Antwort bearbeitet .. Haben Sie app.use (express.bodyParser()); zu deiner App? – Bonanza

+0

Ich sollte es zuerst gefragt haben .. Welche Version von Express verwenden Sie? – Bonanza