是否可以在不刷新页面的情况下从同一URL进行POST?

时间:2017-04-04 16:54:29

标签: node.js ajax express post feathersjs

我正在使用ajax这样做并且在后端响应res.end但是到目前为止,我只能发布一次。这是我的代码:

服务器

app.post("/awesome", passwordless.restricted({ failureRedirect: "/" }), (req, res, next) => {
  // ...do a bunch of stuff
  res.end();
});

客户端

$("[data-new-save]").on("click", function () {
  $.ajax({
    url: "/awesome",
    type: "POST",
    data: awesomeDetails,
    success: function () {
      console.log("Cool beans");
      refreshContent(); // Re-renders content

      // Feedback
      $("nav").after("<div class=\"flash success\">Success!</div>");

      setTimeout(function () {
        $(".flash").remove();
      }, 5000);
    },
    error: function () {
      console.log("Welp");

      // Feedback
      $(".navigation").after("<div class=\"flash error\">Failure</div>");

      setTimeout(function () {
        $(".flash").remove();
      }, 5000);
    }
  });
});

2 个答案:

答案 0 :(得分:1)

这听起来像是事件委派的案例。我最好的猜测是,您的refreshContent()函数正在移除原始[data-new-save]元素并创建新元素。这将导致绑定的click事件被删除,并且它是最初调用时存在的DOM节点的属性。你可以通过将事件委托给一个没有“刷新”的DOM节点来解决这个问题,我假设<body>标签没有被重绘,只有一些子节点,所以如果你定位{{ 1}}并查找匹配<body>的选择器,它应该正常运行:

"[data-new-save]"

答案 1 :(得分:0)

这就是我用于类似的东西:

=