使用 ajax 在不刷新站点的情况下更改 mongoDB 中的某些项目

Posted

技术标签:

【中文标题】使用 ajax 在不刷新站点的情况下更改 mongoDB 中的某些项目【英文标题】:Working with ajax to change some items in mongoDB without refreshing the site 【发布时间】:2019-10-14 10:22:31 【问题描述】:

我有“订单页面”,其中应该显示订单,并且可以使用 ajax 进行更改而无需重新加载页面。如何通过单击按钮更改 mongoDB 中的特定布尔值?此外,每次有新订单出现时我都需要刷新页面而不重新加载页面。

使用路由重新加载页面效果很好,但我需要 AJAX。

Script.js

  $('.confirm').click(function()
    event.preventDefault();
    event.stopPropagation();
    $.ajax(
      url: 'order/' + $(this).attr('data-id') + '/confirm',
      type: 'POST',
      contentType: 'application/json',
      success: function()
      
  );
);

index.ejs

<form class="confirm" data-id="<%= order.id %>" method="POST">
  <button class="btn btn-success btn-lg" type="submit"><i class="fas fa-check"></i> Priimti</button>
</form>

orders.js

router.post('/order/:id/confirm', isLoggedIn, function(req, res)
      Order.findOneAndUpdate(_id: (req.params.id),  $set:  isConfirmed: true, isDone: false  ,  returnOriginal: false , (err, result) => 
        if (err)
          console.log(err);
        
    );
  );

因此,网站应该通过单击按钮将 mongoDB 中的“isConfirmed”等订单参数从 false 更新为 true,而无需重新加载。此外,所有订单都应该出现在网站上,而无需重新加载。

【问题讨论】:

我知道它必须在 'success' 中有一些代码,但是我需要在那里写什么来更新订单? 您的代码有什么问题?您是否遇到错误,是否未保存数据等。 所以页面上基本上有几个部分。 “等待确认订单”“待定订单”“已完成订单”,当单击按钮时,它应该将订单替换到新部分,但直到我重新加载页面才会发生这种情况 【参考方案1】:

您需要使用 ajax 调用的 success: function(someVar) 部分。这会告诉您的代码在调用后应该做什么,并且您从路由传递的任何上下文都可以通过someVar 访问。例如:

假设您的 index.html 看起来像这样,并且您正在使用 jQuery:

  $.ajax(
  url: 'order/' + $(this).attr('data-id') + '/confirm',
  type: 'POST',
  contentType: 'application/json',
  success: function(data)
      //code to change the html of "someDiv"
      $('#someDiv').html(data['someData']);
  

附带说明,我建议始终在您的函数中传递e,而不是调用event.preventDefault(),因为event 本身有时在Firefox 上不起作用。例如:

$('.confirm').click(function(e)
  e.preventDefault();
...

最后,我认为您不需要event.stopPropagation

【讨论】:

但是我需要在成功函数中改变的只是订单值从“isConfirmed = false”到“isConfirmed = true”。我不需要更改 html 本身的任何内容,因为它根据订单值使用 .ejs 呈现

以上是关于使用 ajax 在不刷新站点的情况下更改 mongoDB 中的某些项目的主要内容,如果未能解决你的问题,请参考以下文章

引导切换以使用 AJAX 在不刷新页面的情况下更改 MySQL TINYINT

如何在不刷新网页的情况下使用 ajax 和 jquery 动态更改 Datatables 的多个列标题?

如何在不刷新页面的情况下更改路线和内容? (机器人友好)

Ajax Javascript 在不刷新页面的情况下不会改变样式

如何在不重绘图表的情况下刷新 jqplot 条形图

如何使用 Django、Ajax、jQuery 在不刷新页面的情况下提交表单?