【问题标题】:Get the data after redirect重定向后获取数据
【发布时间】:2019-12-11 18:08:43
【问题描述】:

我有一个页面“/订单/新”,其中包括 2 个用于客户及其地址的下拉菜单和一个重定向以选择要添加到订单的产品的按钮,我将产品放在一个数组中并将该数组传递给'/order/new'..但是当我重定向时,我没有得到选定的客户及其地址..我保存将按顺序添加到名为 hh 的全局数组中的产品,它从 ajax 获取数据

我想在添加产品数组后获取客户及其地址


global.hh = new Array();

module.exports = {

getProduct: (req , res ) => {
  var products = req.query.selectedProduct;
  var total = req.query.sumTotal;
 var btekh = hh.push(products)
}
getOrderProduct: (req , res) => {
  let query1 = "SELECT * FROM `product`";
  getConnection().query(query1 ,(err , result) => {
    if(err) {
     return res.status(500).send(err);
    }
    res.render('productOrder.ejs' , {
      products: result
    });
  });
},
addOrderProduct: (req, res) => {
  res.redirect('/order/new')
}


postOrder: (req ,res) => {
  var products = req.session.products;
    getConnection().query('INSERT INTO `order` ( clientId , addressId,orderStatusId) VALUES (?,?,?)', [req.body.selectUser, req.body.selectAddress,req.body.selectedStatus], (err,result) => {
    if (err) {
      console.log(err);
    }
  hh.slice(-1)[0].forEach(function (item) {
    let insertedOrder = result.insertId;
    let query = "INSERT INTO `orderProduct`( `orderIdProduct`, `productId`, `orderProductName`,`orderProductPrice`, `orderProductQuantity`, `orderProductTotal`) VALUES (?,?,?,?,?,?)";
    getConnection().query( query , [insertedOrder,item.check,item.name,item.p,item.q,item.total] , (err , result)=>{
      if (err) {
        console.log(err);
      }
      res.end();
  })
})
})
}
  res.redirect('/')
}
app.get('/order/new' , addOrderPage)
app.use('/postOrder' , postOrder);
app.use('/order/product' , getProduct);

我的 ajax 代码:

////////////////add users's address///////////////////////////
 $('#user').change(function(){

    var item = $('#user').val();
    $.ajax({
        type:'GET',
        data: { selectedId: item },
        url:'/users/address',
        success: function(data){
             $('#address').empty();
         $('address').append("<option disabled selected> Select Address..</option>");
         $.each(data, function (index, addressObj) {
                $('#address').append("<option value = '" + addressObj.addressId + "' > " + addressObj.addressName + " </option > ");
            });
        }
    });
   })

;
//////////////get the product to order/////////////
     $('#save').click(function () {
        var orderProduct = new Array();
        $("#table input[type=checkbox]:checked").each(function () {
                      var row = $(this).closest("tr");
                      var message0 = row.find('#check').val();
                      var message1 = row.find('.name').text().trim();
                      var message3 =  row.find('.currency').text().trim();
                      var message4 =  row.find(".foo").val();
                      const result =  {check: message0,name: message1,p: message3,q:  message4 ,total: message3 * message4}
                      var hh = orderProduct.push(result);
                });
                console.log(orderProduct);
                var totalPrice = 0;
             orderProduct.forEach(function (item , index) {
                totalPrice = totalPrice + item.total
              })
              $.ajax({
                type: 'GET',
                data: {selectedProduct: orderProduct , sumTotal: totalPrice},
                url: '/order/product',
                success: function (data) {
                  console.log(data);
                }
              })
               })

'/new/order' 我的 ejs:

<header>
        <h2>New Order : </h2>
      </header>
      <form action="/postOrder" method="post" id="newForm" >
        <label> User Name:</label>
        <select name="selectUser" id="user" >
          <option disabled selected> Select User..</option>
      <% users.forEach((users) => { %>
        <option value="<%= users.id %>"  > <%=users.name %> </option>
        <%  })  %>
        </select>
        <br>
        <label>Address :</label>
        <select name="selectAddress" id="address">
          <option disabled selected> Select Address..</option>
      </select>
        <br>
        <label>Product</label>
      <a href="/orderProduct" id="addProduct"> add product</a>
        <br>
        <label>Status</label>
        <select name="selectedStatus">
        <% status.forEach((status) => { %>
            <option value="<%= status.statusId %>"> <%= status.statusText %></option>
        <%  })  %>
      </select>
      <br>
        <input type="submit" value="Save">
      </form>

【问题讨论】:

    标签: mysql node.js ajax ejs


    【解决方案1】:

    在这些行中,

    res.render('productOrder.ejs' , {
          products: result
        });
    

    您是否已成功从数据库中取回所有产品?

    因为在您的 AJAX 调用中,

    $.ajax({
                type: 'GET',
                data: {selectedProduct: orderProduct , sumTotal: totalPrice},
                url: '/order/product',
                success: function (data) {
                  console.log(data);
                }
              })
    

    您正在发送数据,但未在此处的“查询 1”中使用它,

    let query1 = "SELECT * FROM `product`";
    

    我正在尝试了解您的程序。

    所以用户访问您的网页,他们选择了一个产品,您的网页使用产品信息 ping 您的 REST 服务器,您的 REST 服务器 ping 您的数据库以查找该产品,然后该数据在此处呈现到此模板?

    res.render('productOrder.ejs' , {
          products: result
        });
    

    编辑:您必须处理与事件侦听器的用户交互以及使用某种存储方法的用户输入。

    Your_client-side_JS_script.js

    function handle_submit(e) {
      e.preventDefault();
      if (e.target.id === 'addProduct') {
        // When they click add product, you need to either pass their user details to the route and send them with the $.ajax GET request
        //... and keep track of the data like that
        // OR
        // track that data in a cookie,
        read up on cookies https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
      } else if (e.target.id === 'newForm') {
        console.log("Submit Form");
      }
    };
    $('#addProduct').on('click', handle_submit);
    $('#newForm').on('submit', handle_submit);
    

    我推荐cookie方法。您设置 cookie 一次,在需要时使用它,然后在完成后将其删除。

    使用第一种方法,您必须在 fetch 中发送数据(不需要该数据来获取产品),然后您必须在整个后端管理该 user_data 以确保它不会获取丢失。工作量太大了。请改用 cookie 方法。

    【讨论】:

    • 我使用 ajax 来获取要添加到订单中的选定产品,并且我在 hh 数组中得到了它。我更新了我的问题,请查看并回答
    • 好的,所以你有一个函数 'getProduct: (req , res ) => {}' 推送 'var products = req.query.selectedProduct;'该产品到全局数组 hh。您确定您的其他文件可以读取该全局数组吗?
    • 是的..我可以在我的 postOrder 函数中得到这个数组..但是如果你有更好的主意,告诉我
    • 您的 REST API 服务器正在从数据库中检索信息。然后,您将用户重定向到不同的路由“/order/new”,但您不会将信息发送到新的路由处理程序。我认为它看起来像'app.get('/order/new')'。试试link。您可以通过 URL 将信息作为查询字符串传递(不推荐),或者使用“req”对象传递数据。您知道如何在“req.body”中获取 POST 数据吗?您可以将数据添加到“req”对象。前任。 req.product = hh;
    • 我更新了我的问题,希望它更明显。我想从下拉菜单中选择用户和地址,然后转到“/addProduct”以选择要订购的产品,当我点击保存时重定向我使用一系列产品“hh”来“/new/order”并再次在下拉菜单中显示选定的用户和地址
    猜你喜欢
    • 2021-09-29
    • 2018-09-11
    • 2018-04-07
    • 2019-04-25
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    相关资源
    最近更新 更多