【问题标题】:Trying to access Model data from a JavaScript function after the page has been rendered NodeJS EJS在呈现页面后尝试从 JavaScript 函数访问模型数据 NodeJS EJS
【发布时间】:2020-06-18 15:51:58
【问题描述】:

这是我的第一个 NodeJS 应用程序,所以这可能是一个初学者的问题。我正在使用 Ejs 构建 UI,并且我正在发送一个模型,其中包含我在表格中显示的数据。

我正在尝试在 JavaScript 函数中访问此模型的数据,以节省对数据库的另一个调用,但我似乎无法正确处理。

<h1 class="in-line">Phone Log (<%= model.length %>)</h1>
<p id="pPhoneValue" class="in-line right-element">R -------</p>
<button class="btn btn-primary in-line right-element" onclick="valueSearch(model)">View</button>
<input class="in-line right-element" type="number"  id="iPhoneID" name="iPhoneID" placeholder="Enter Phone ID">
<div class="table-responsive-sm">
    <table class="table table-hover">
        <thead>
            <tr>
                <th>Phone ID</th>
                <th>Make</th>
                <th>Model</th>
            </tr>
        </thead>
        <tbody>
            <% for( const phone of model) { %>
                <tr>
                    <td><%= phone.ID %></td>
                    <td><%= phone.Make %></td>
                    <td><%= phone.Model %></td>
                </tr>
            <% } %>
        </tbody>
    </table>
</div>

这是 javascript 函数,但现在它只是为感兴趣的人显示传递的数据。

function valueSearch(Data){
    console.log(Data);
}

目前,当我按下按钮时,我得到“模型未定义”。

这是从 NodeJs 调用和呈现页面的代码:

app.get("/view", (req, res) => {
    sql.connect(dbConfig, function (err){
        if (err) {
            console.log(err);
        }
        const request = new sql.Request();
        const getAllQuery = "SELECT * FROM Phone_Information ORDER BY PhoneID";
        request.query(getAllQuery, function(err, result){
            if (err) {
                console.error(err.message);
            }
            sql.close();
            res.render("viewLog", { model: result.recordset });
        });
    })
});

【问题讨论】:

    标签: javascript node.js express ejs


    【解决方案1】:

    嘿,OP,如果您可以发布 nodejs,那就太好了,因为它可能会有所帮助。 我不知道你的程序是如何工作的,但使用 ejs 可以:

    valueSearch(<%=model%>)
    

    如果你想代表一个变量,你总是需要&lt;%%&gt;,因为 html 不会理解你在说什么变量

    编辑:我试过但它不起作用,也许这是 ejs 与 html 交互的方式,或者我遗漏了一些东西,但你可以真正定义它的一种方法是:

    let model = document.querySelectorAll('#model').innerText
    

    ejs 文件:

    <div id = "model" hidden><%= model %></div>
    

    【讨论】:

    • 您好,我将更新问题以包含 NodeJs 代码,我不确定是否需要它,因为我认为这是一个前端问题。但是我确实已经尝试了 并且它抛出了一个错误,说它找不到匹配的关闭标签“
    • 如果没有说 'varname is not defined' 你可能是在正确的轨道上(或者它是下一个错误)。如果它说“找不到结束标签:...”,则表示这是一个语法错误。安装 EJS lint 然后运行命令 ejslint npmjs.com/package/ejs-lint
    • 感谢 EJS Lint 提示。因此,如果我使用 onclick="valueSearch()" 那么我会得到“未定义”,所以它似乎确实有效,但值不存在。如果我使用 onclick="valueSearch()" 那么我得到 Unexpected identifier 错误。不确定这是否有帮助
    • 是的,我试过了,但它不起作用。也许这就是 ejs 与 html 中的 javascript 交互的方式,但它不起作用。尝试我在答案中编辑的新方法。
    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 2020-07-23
    • 2014-04-14
    • 2019-05-10
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多