【问题标题】:Do I sent two requests to the ActionResult?我是否向 ActionResult 发送了两个请求?
【发布时间】:2019-08-27 11:15:21
【问题描述】:

我有一个 ASP.net MVC 项目,根据用户选择的过滤器选项,我将不同的 ajax 请求发送到相同的 actionresult,例如:

 $(document).on("click", "#filter_reset_button", function () {
    var url = "/Admin/Index";

    ajaxRequest({
        url: url,
        type: "get",
        data: { reset: true },
        successCallback: function () {
            window.location.href = url;
        }
    });
});

其他监听器发送不同的数据,例如:

 data: { page: 2, filterUpdate: true }

等等。 Index ActionResult 返回不同的项目列表,具体取决于数据中选择的不同选项,并且代码完全可以正常工作。

我的一位同事告诉我,我的代码实际上每次都向 AR 发送两个 get 请求,因此效率不高。真的吗?如果是这样,我该如何重构它。让它只是一个请求?如果我让 window.location.href = url 部分出来,该站点实际上不会加载服务器响应。

【问题讨论】:

  • 添加 Index Action 方法的示例,以便其他人可以进一步帮助您。

标签: ajax asp.net-mvc get


【解决方案1】:

是的,您在单击按钮时执行了 2 个请求。 Ajax获取第一,成功回调第二。

但是你为什么打电话给window.location.href = url;success 回电。 ?

如果您想在点击后更新页面,您可以对页面进行部分更新。查看this 的帖子。

【讨论】:

    【解决方案2】:

    这是正确的 2 请求调用。

    当您调用 AJAX get 到管理控制器中的操作索引时的第一个请求。

    设置window.location.href = url时的第二次请求,和在浏览器中输入/Admin/Index一样。

    在这种情况下,您只需要在点击功能中使用window.location.href = '/admin/index?reset=true'

    【讨论】:

    • 那么有没有办法改进我的代码?因为没有 window.location.href 我的浏览器不会将服务器响应加载到窗口中。
    • 这种情况下不需要ajax,只能使用/admin/index?reset=true
    • 遗憾的是它不起作用,我们在索引 AR 中有一些复杂的逻辑,并且重置是许多参数之一,所以基本上如果我执行 /admin/index?reset=true 它会删除另一个选项已经保存了,但是如果我在此之后执行 Ajax 请求和 windows.location.href,reset 会保存到 AR 中,并且新页面会加载所有以前保存的选项(包括 reset = true)。
    • 您需要在结果ajax中返回数据并根据json数据更新UI
    • 你能再深入一点解释一下吗?我不确定我是否理解如何执行您在此处所写的操作。
    【解决方案3】:

    你可以在这里看到帖子 at this post

    实际上在成功回调时,您必须根据上述帖子更改您的代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 2014-11-09
      • 2021-12-19
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      相关资源
      最近更新 更多