Nemůžete tak učinit, pokud odesíláte požadavek pomocí volání API z Ajaxu nebo jiných metod.
Všechny tyto metody mají implementovat Jednostránkovou aplikaci , takže vykreslení jiné stránky není povoleno.
Co se stane, když je splněna podmínka a požadavek na vykreslení jiné stránky?
Modul, který zavolal API, čeká na odezvu prohlížeče, aby získal nějakou odpověď od API, ale vaše API se pokouší načíst jinou HTML stránku, kterou prohlížeč zakazuje, a proto se nikdy nevykreslíte pomocí volání Ajax.
Jak to udělat?
Existují dvě cesty ven:
- Jednostránková aplikace:Pomocí rozhraní JavaScript, jako je AngularJs, vám ReactJs pomůže tím, že změní pouze šablony HTML, nikoli celou stránku.
S Ajaxem můžete udělat toto:
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);
}
});
}
Kód na straně serveru Předpokládám, že používáte express.js a body-parser
app.post('/addName', (req, res) => {
//Insert into db
var body = req.body;
res.send({
fName: body.FName,
lName: body.LName
});
});
- Použijte
form
Způsob odeslání:pomocí tohoto budete moci vykreslit stránku, ale nemůžete odeslat odpověď zpět na stejnou stránku, tj.
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
});
}
});
});