Du kan ikke gøre det, hvis du indsender en anmodning ved hjælp af et API-kald fra Ajax eller andre metoder.
Da alle disse metoder er at implementere Single Page Application , så gengivelse af en anden side er ikke tilladt.
Hvad sker der, når betingelsen er opfyldt og anmoder om at gengive en anden side?
Modulet, der kaldte API, venter på svar på browser for at få noget svar fra API, men din API forsøger at indlæse en anden HTML-side, som browseren forbyder, og du vil derfor aldrig blive gengivet via Ajax-kald.
Hvordan gør man det?
Der er to veje ud:
- Enkeltsideapplikation:Brug af JavaScript-rammer som AngularJs, ReactJs vil hjælpe dig ved blot at ændre HTML-skabeloner og ikke hele siden.
Med Ajax kan du gøre dette:
HTML
<body>
<div>
<div align="center">
<form id="form1">
<label>Please enter below details</label><br><br>
<label>First Name *: </label><input id="FName" type="text" name="FName"/><br><br>
<label>Last Name *: </label><input id="LName" type="text" name="LName"/><br><br>
<label>Email Address *: </label><input type="email" name="email"><br><br>
<br><br>
<input type="button" value="Submit" onClick:"submitForm()"/>
</form>
<div id="showValue"></div>
</div>
</div>
</body>
JavaScript
function submitForm() {
$.ajax({
url: '/addName',
type: 'POST',
headers: headers,
data: {
"Fname": $("#FName").val(),
"Lname": $("#LName").val(),
"email": $("#email").val()
},
success: function(result) {
//append result to your html
//Dynamic view
$("#form1").hide();
var html = '<div><span>First Name: ' + result.fName + '</span><span>Last Name: ' + result.lName + '</span></div>';
$("#showValue").html(html);
},
error: function (error) {
alert('error ',error);
}
});
}
Serversidekode Jeg går ud fra, at du bruger express.js og body-parser
app.post('/addName', (req, res) => {
//Insert into db
var body = req.body;
res.send({
fName: body.FName,
lName: body.LName
});
});
- Brug
form
Send metode:ved at bruge denne vil du være i stand til at gengive siden, men du kan ikke sende svar tilbage til samme side, dvs.
HTML
<body>
<div>
<div align="center">
//Can't send params using this approach
//Data will be send as query string
<form action="/postedUser/" method="GET">
<label>Please enter below details</label><br><br>
<label>ID *: </label><input id="ID" type="text" name="ID"/><br><br>
<input type="submit" value="Submit" /></form>
</div>
</div>
</body>
NodeJS
//If there will be res.send({});
// This won't be returned to same page. But your code doesn't do any such thing
router.get('/postedUser/', ensureAuthenticated, function(req, res) {
User.findOne({_id: req.query.id}, function(err, data) {
if (err) throw err;
if (req.user._id == data._id) {
res.redirect('/users/profile');
} else {
res.render('postedUser', {
data: data
});
}
});
});