【问题标题】:Executing a piece of code on every ajax request在每个 ajax 请求上执行一段代码
【发布时间】:2018-10-16 20:41:45
【问题描述】:

我正在开发一个 ASP.net 表单项目。在每个 ajax 请求上,我都需要执行一段代码(在这种情况下,重置会话到期)。实现这一目标的最佳方法是什么?

【问题讨论】:

  • 前端还是后端?

标签: c# asp.net webforms asp.net-ajax


【解决方案1】:
  1. 在 ajax 请求上创建一个包装器,您将从用户代码中调用它
  2. 假设您正在使用类似 jQuery ajax 的东西,它返回一个 Promise,将您的 _always_run_this_function_ 链接到成功处理程序,然后返回。

由于一个 Promise 可以有任意数量的处理程序,1) 您的常用函数和 2) 用户函数将按顺序运行。

   function AjaxWrapper(webMethodName, parameterListInJsonFormat) {  
       var promise = $.ajax({  
          url: "Service.svc/" + webMethodName,  
           contentType: "application/json; charset=utf-8",  
          type: "POST",  
           input: parameterListInJsonFormat  
         });  
         promise.done(_always_run_this_function_);
         return promise;
    }

详情:https://www.codeproject.com/Articles/636701/jQuery-Promise-An-introduction-to-AJAX-with-multic

【讨论】:

    【解决方案2】:

    在 AJAX 请求的生命周期中会发生许多全局 AJAX 事件:在发送请求之前就是其中之一。您可以使用它来设置每次在您的页面中进行任何 AJAX 调用时运行的处理程序。

    这可能有助于ASP.NET Ajax Life Cycle

    【讨论】:

    • 在 global.aspx 中,我实现了以下方法 Sub Application_EndRequest(sender As Object, ByVal e As EventArgs) If (Session("_UserID")) Is Nothing Then Session.Timeout = 60 * 24 ' 24 小时 End If End Sub 但不幸的是,它不允许我在这里访问会话变量,错误是“会话状态在此上下文中不可用”。有什么建议吗?
    • 听起来您有范围界定问题。我不是 ASP 编码员,所以不能肯定地说什么,但是您需要通过 ref 将会话传递给回调方法
    【解决方案3】:

    你可以使用ajax拦截器,

    $.ajaxSetup({
    beforeSend: function (xhr) {
        /// call your method here
    }});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2017-02-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多