我曾经在另一个问题中读到类似的内容
(链接)。基于这篇
教程,我找到了解决所有问题的答案。
此教程讲解如何使用PJAX库来管理客户端和服务器端。
只需3行代码即可实现无需重新加载页面的高速导航。
- 从jQuery-pjax页面安装客户端库
- 在发送请求的html页面中添加:
<a href='/yourLink' data-pjax='main'>YourLink</a>
其中,main
是包含您更改内容的div。在我的情况下是:
<div id="main" class="main">
{{{body}}}
</div>
In your.js file add $('a[data-pjax]').pjax();
This command 'simply call the pjax extension on every element that contains the data attribute ‘data-pjax’'
Install inside express the depency with the command: npm install --save express-pjax
Set your server:
var app = express();
var pjax = require('express-pjax');
...
app.use(pjax())
- 替换普通渲染:
res.render('index', {title: "Index"});
改为:
res.renderPjax('index', {title: "Index"});
更新
或者您可以获得相同的结果。请注意,项目结构如下:
views
|-> partials
| |-> addtest.hbs
|
|-> index.hbs
例如,假设在您的index.hbs文件中有一个带有不同项目的侧边栏,可以用以下方式描述:
<li>
<a href="#testDB" data-toggle="collapse" aria-expanded="false" class="dropdown-toggle">
<img src="../img/database-data.svg" class="svg icon">Test</a>
<ul class="collapse list-unstyled select-specific" id="testDB">
<li value="addTest" class=" ">
<a href="#" id="add-new-test">Add Test</a>
</li>
....
....
</ul>
</li>
在partials目录中,您有一个简单的表单。现在要管理表单,需要执行两个操作:
服务器端:为了在不刷新页面的情况下从一个部分切换到另一个部分,您需要指定:
router.get('/addtest', function (req, res) {
res.status(200);
res.header("Content-Type", "text/html");
res.render('partials/addtest', {title: "Add Test"});
});
客户端:在您的客户端文件中,您需要添加一个简单的get请求:
$('#add-new-test').click(function (event) {
$.get('/addtest').then(function (data) {
$('#main').html(data);
});
});
这样,当您使用相同地址(即在此情况下为 /addtest)进行get请求时,客户端会将一部分代码添加到您的视图中而无需刷新全部内容。
注意:请记住,如果您的部分需要某个file.js文件,请使用以下命令加载该文件:
<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>
这是用于避免:"在主线程上使用同步XMLHttpRequest已弃用..."
,因为该调用是异步的。更多信息请参见此处。