【问题标题】:How do I pass a JSON object to inline javascript In EJS如何在 EJS 中将 JSON 对象传递给内联 javascript
【发布时间】:2016-11-08 10:56:40
【问题描述】:

我只想将 EJS 对象发送到 javascript 函数。我试过下面的代码,但没有用。

<% books.forEach(function(book){ %>
    <button onclick="getBookDetails(<%=book %>);" > <%=book.name %></button>
  <% }); %>

我的 JavaScript 代码是

function getBookDetails(book){
   //using book object
}

我也尝试过以下内容。但没有帮助。getBookDetails(&lt;%=JSON.stringify(book) %&gt;);

请帮我找出错误。

【问题讨论】:

    标签: javascript json ejs


    【解决方案1】:

    您不能调用getBookDetails(&lt;%=book%&gt;),因为&lt;%=book%&gt; 将被评估为[object Object],而不是您需要的{ name: "Wind in the willows, author: "Kenneth Grahame" }

    使用JSON.stringify 是正确的,但错过了一个关键点:使用&lt;%= 将转义html 实体。相反 - 像这样使用&lt;%-

    <% books.forEach(function(book){ %>
        <button onclick="getBookDetails(<%-JSON.stringify(book)%>);"><%=book.name %></button>
    <% }); %>
    

    你可以使用&lt;%=book.name%&gt;,因为它应该输出一个字符串。

    【讨论】:

    • 你应该用引号括起来:onclick="getBookDetails('&lt;%-JSON.stringify(book)'%&gt;)
    【解决方案2】:

    你应该用单引号包裹你的 ejs 'stringified' 值,像这样 '':

    <% books.forEach(function(book){ %>
        <button onclick="getBookDetails('<%= JSON.stringify(book) %>')"><%= book.name %></button>
    <% }) %>
    

    在JS函数内部,先解析一下:

    function getBookDetails(bookString){
       let book = JSON.parse(bookString)
       // now you can use the book object
    }
    

    【讨论】:

      【解决方案3】:

      您应该删除 JSON.parse().console.log(bookString)
      它对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-26
        • 2020-08-05
        • 2018-04-09
        • 1970-01-01
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多