【问题标题】:send data from ajax GET to ejs file将数据从 ajax GET 发送到 ejs 文件
【发布时间】:2019-08-30 17:01:25
【问题描述】:

我正在使用 ajax GET 调用检索一些用户数据,并希望在 bootstrap card 中显示每个用户,以便我可以使用 jQuery 在页面上过滤这些数据。

目前,我获取数据,遍历每个用户并将一些卡片元素附加到<div class="card-deck"></div>

jQuery:

$(document).ready(function() {
    $.getJSON('/api/user/all')
        .then(data => {
            $.each(data, function (i, user) {
                var userCard = '<div class="col-md-auto mb-4">' +
                '<div class="card matches mx-auto" style="width: 18rem; height: 24rem;">' +

                '<div class="card-body">' +
                    '<h5 class="card-title">' + user.username + '</h5>' +
                    '<p class="card-text">'   + user.jobTitle + '</p>' +
                    '<p class="card-text">'   + user.city + '</p>' +
                '</div>' +

                "</div>" +
                "</div>";

                $('#userList').append(userCard);
            });
        })
})

ejs:

<div class="row">
    <div class="card-container align-items-left">
        <div class="card-deck" id="userList">
            // cards go here ... 
        </div>
    </div>
</div>

这行得通,但是会有很多 html 用于构建卡片,所以我更愿意将整个用户对象(下面是 user)发送到 .ejs 文件,这样我就可以在那里制作卡片:

<div class="row">
    <div class="card-container align-items-left">
        <div class="card-deck" id="userList">

          <div class="col-md-auto mb-4">
              <div class="card matches mx-auto" style="width: 18rem; height: 24rem;">
                  <div class="card-body">
                      <h5 class="card-title"><%=user.username%></h5>
                      <p class="card-text"><%=user.jobTitle%></p>
                      <p class="card-text"><%=user.city%></p>
                  </div>
              </div>
          </div>

        </div>
    </div>
</div>

这是jQuery data 方法的工作吗?

【问题讨论】:

    标签: javascript jquery ajax twitter-bootstrap ejs


    【解决方案1】:

    您需要实现一个端点来获取用户信息并为您的 userList div 形成模板并将数据作为纯 html 字符串发送回。

    必须通过ajax 调用从客户端调用此端点并将响应html 设置为div

    服务器

        app.get('/api/user/all',(req, res){
       //get user data
       const data = [{username:"john",jobTitle:"a",city:"b"},{username:"doe",jobTitle:"a",city:"b"}];
    
       res.render('userTemplate', {users:data} ,function(err, html) {
          res.send(html);
      });
    

    客户

    $.ajax({
      url: "/api/user/all",
      cache: false,
      success: function(html){
        $("#userList").innerHtml(html);
      }
    });
    

    userTemplate.ejs

    <% for(var i=0; i < users.length; i++) { %>
        <div class="col-md-auto mb-4">
            <div class="card matches mx-auto" style="width: 18rem; height: 24rem;">
                <div class="card-body">
                    <h5 class="card-title"><%= users[i].username %></h5>
                    <p class="card-text"><%= users[i].jobTitle %></p>
                    <p class="card-text"><%= users[i].city %></p>
                </div>
            </div>
        </div>
     <% } %>
    

    【讨论】:

      【解决方案2】:

      EJS 是服务器端代码。

      如果您想生成 HTML 服务器端而不是修改 DOM 客户端,请将 getJSON 替换为 ajax 调用(使用 dataType: "html")并将 /api/user/all 更改为端点(您将拥有to create) 获取数据并将其插入到 EJS 模板中。

      【讨论】:

        猜你喜欢
        • 2021-09-16
        • 1970-01-01
        • 2019-12-31
        • 2016-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        相关资源
        最近更新 更多