![](/img/trans.png)
[英]Post request without reloading page and support for no javascript (Node Express framework)
[英]Node JS express-handlebar reloading a page
我正在编写一个Node.js + Express + Express-Handlebar应用程序。 我正在从MySQL数据库读取数据并将其显示在表中。 我正在实现分页功能,单击“下一步”按钮时,我将对我的节点js服务器进行ajax调用
$j('.btn-nxt').click(function(){
$j.ajax({
type: 'post',
url: '/',
data : {
action: 'next'
},
error: function(err) {
console.log('------------ Error while updating this resident: ' + err);
console.log('------------ Error while updating this resident: ' + err.message);
}
});
});
以下是我的index.handlebars的index.js路由
index.js
var express = require('express');
var router = express.Router();
var callDatabase = require('../config/database.js');
var startIndex = 0;
var recordLimit = 10;
//home page route
router.get('/', function(req, res){
callDatabase.getResidents(req, res, startIndex, recordLimit);
});
router.post('/', function(req, res){
var data = req.body;
var action = data.action;
if(action == 'next') {
startIndex += recordLimit;
}
callDatabase.getResidents(req, res, startIndex, recordLimit);
res.redirect('/');
});
module.exports = router;
这是database.js,我在其中实际调用数据库
database.js
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'dbname-db.rds.amazonaws.com',
user : 'username',
password : 'password',
port: '3306',
database : 'dbname',
multipleStatements: true,
dateStrings: true
});
var residentQuery = 'SELECT idResidents, name, primaryEmail FROM Residents LIMIT ';
exports.getResidents = function(req, res, startIndex, recordLimit) {
connection.query(residentQuery + startIndex + ',' + recordLimit, function(err, rows, fields) {
if (err) {
console.log('----------------------- ERROR: Error querying records - ' + err);
console.log('----------------------- ERROR: ' + err.message);
return err;
}
for(var i in rows) {
console.log('id: ' + rows[i].idResidents + ' name: ' + rows[i].name + ' email: ' + rows[i].primaryEmail);
}
res.render('index', {
title:'Test Node App',
dbrows: rows
});
});
}
运行我的应用程序时,出现前10行,当我单击下一步按钮时,将进行ajax调用,并且可以在database.js的conslo.log中看到接下来的10行。 但是我的观点没有得到更新。 我尝试从index.js的route.post()和database.js都调用res.render('/'),但这给我一个错误,说:“发送标头后无法设置标头”。
如何刷新我的桌子? 我正在使用{{#each dbrows}} ... {{/ each}}填充行。
我使用location.reload()从ajax本身重新加载了页面。 因此,当单击下一个或上一个分页选项时,它将转到ajax函数,该函数依次调用节点服务器以获取下一个/上一个数据集。 在数据之后的同一ajax函数中,我添加了成功属性-成功:{location.reload()},错误:{....}。 现在,它就像一种魅力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.