gpt4 book ai didi

javascript - 包含在 ejs 中的 Ajax

转载 作者:行者123 更新时间:2023-12-04 17:52:29 25 4
gpt4 key购买 nike

当我尝试在我的 ejs 文件中添加 include 时,它​​工作正常。HTML报告.ejs

<tbody>                  
<%- include('include/playersTable'); %>
</tbody>

Javascript

$.get('/reports.ejs', function (template) {
// Compile the EJS template.
reportTemplate = ejs.compile(template);
});

但是当我用 ajax 调用它时它说include 使用相对路径需要 'filename' 选项。

当我在客户网站上尝试时

Javascript

$.get('/reports.ejs', function (template) {
// Compile the EJS template.
reportTemplate = ejs.compile(template, {client: true});
});

它说

include 不是函数 at eval (eval at compile (ejs.js:525), :103:17)

最佳答案

您遇到此问题的原因是 ejs 无法访问客户端 (javascript) 上的文件系统。所以发生的事情是这样的:

  1. ajax 获取 reports.ejs
  2. ejs 开始编译。
  3. 当 ejs 到达 include 标记时,它会查找该文件。
  4. 由于它无法访问文件系统,因此无法找到该文件。
  5. ejs 发送错误。

在 ejs 网站上它说:

大部分 EJS 将按预期工作;但是,有几点需要注意:

由于您无权访问文件系统,ejs.renderFile 将不起作用。出于同样的原因,除非您使用包含回调,否则包含不起作用。这是一个例子:

let str = "Hello <%= include('file', {person: 'John'}); %>",
fn = ejs.compile(str, {client: true});

fn(data, null, function(path, d){ // include callback
// path -> 'file'
// d -> {person: 'John'}
// Put your code here
// Return the contents of file as a string
}); // returns rendered string

我推荐的另一种解决方法是定义一个 ajax 路由,如下所示:


app.get('/ajax/:filename', (req, res) => {
res.render(req.params['filename'], req.query);
// This allows you to pass data in ajax like: `$.get("/ajax/reports?username=jhon&hello=world")`
});

这会在服务器端进行渲染,可以访问文件系统。

关于javascript - 包含在 ejs 中的 Ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43526005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com