2016-12-07 2 views
0

ich einen Beitrag Anfrage an den Server über Ajax zu senden:Render einen Blick nach Post-Anforderung in Node.js

result.ejs

$.ajax({ 
    type: "POST", 
    url: "/result", 
    data: { score: score, rank: rank, name: name, email: email, historyLog: historyLog } 
    }); 

ich es bin reciveing ​​und in die Datenbank zum Speichern von Daten :

resultController.js

app.post('/result', urlencodedParser, function(req, res) { 

     var user = new User({ 
     name: req.body.name, 
     email: req.body.email, 
     score: req.body.score, 
     rank: req.body.rank, 
     historyLog: req.body.historyLog 
     }); 

     user.save(function(err) { 
     if (err) throw err; 
     console.log('User saved successfully!'); 

     }); 


    }); 

Nach dem Speichern möchte ich eine neue Ansicht rendern, und ich kann es nicht funktionieren. Ich habe versucht, indem diese nach der Funktion speichern:

res.redirect('page'), res.render('page'), headers html/text

Keines der oben genannten Einstellung funktioniert. Irgendwelche Vorschläge?

Antwort

2

AJAX wird normalerweise genau dann verwendet, wenn Sie nicht möchten, woanders navigieren, sondern stattdessen mit dem Server im Hintergrund sprechen. Um es noch Ihren Weg machen, verwenden res.send("done");innerhalb Rückruf pariert, direkt nach console.log('User saved successfully!);, dann fügen Sie diese zu Ihrer Ajax-Anfrage:

success: function() { window.location.href = "/page"; } 

Eine viel einfachere Art und Weise den gesamten Prozess zu implementieren ist ein <form method="post" action="/result"> zu verwenden und reichen Sie es ein.

+0

Ja, die Verwendung eines Formulars wäre viel einfacher, aber ich kann es einfach nicht in meinem Fall implementieren, aber diese Funktion zum Ajax-Erfolg hinzuzufügen, war der Trick! +1 – mirta

-2

Wenn Sie Seite nach dem Speichern machen möchten - fügen Sie es Rückruf bei der Rettung, wie diese

app.post('/result', urlencodedParser, function(req, res) { 
 

 
     var user = new User({ 
 
     name: req.body.name, 
 
     email: req.body.email, 
 
     score: req.body.score, 
 
     rank: req.body.rank, 
 
     historyLog: req.body.historyLog 
 
     }); 
 

 
     user.save(function(err) { 
 
     if (err) throw err; 
 
     console.log('User saved successfully!'); 
 
     res.render('page');//ADD HERE redirect o render 
 
     }); 
 

 

 
    });

+0

Aber wird dies dazu führen, dass eine neue Ansicht gerendert wird? Der Browser fordert über AJAX "/ result" an, was bedeutet, dass die Antwort immer noch verworfen wird, egal wo und wie sie generiert wird. –

+0

Wenn Sie Ajax verwenden, müssen Sie einige Informationen in Antwort (JSON oder nur Status 200) senden und dann eine Umleitung (oder etwas zeigen) auf Client-Seite entsprechend dieser Antwort –

0

Diese feine schreiben funktioniert. Bessere Form zum Posten.

app.post('/result', function(req, res) { 

    new user({ 
    name: req.body.name, 
    email: req.body.email, 
    score: req.body.score, 
    rank: req.body.rank, 
    historyLog: req.body.historyLog 
    }).save(function(err,doc) { 
    if (err) throw err; 
    else { res.render('pagename.ejs'); } 
    console.log('User saved successfully!',doc); 
    }); }); 

hoffe das wird dir helfen.

+0

Diese Antwort ist nicht nur für eine Person.In Zukunft jemand kann dies beziehen.So, wenn Sie antworten, fügen Sie bitte Erklärung – lalithkumar

+0

hinzugefügt danke für Hilfe – Swapnil

Verwandte Themen