1

我正在开发一个 asp.net mvc3 应用程序。

我有这个 Jquery 函数

    function CheckSession() {
        $.ajax({
            type: 'POST',
            url: '@Url.Action("CheckSession", "Home")',
            success: function (isAvailable) {
                return isAvailable;
            },
            complete: function (owner) {

            },
            error: function (owner) {
                alert('Error Getting session');
                return false;
            }

        });
    }

基本上这个会话所做的是调用一个动作,HomeController该动作将返回真或假。

我想要做的是,在应用程序中的每个 ajax 调用之前,我想首先使用这个函数。如果它返回true我们继续调用,否则我们不做任何事情。

有没有办法做到这一点而不必遍历所有代码并在每次 ajax 调用之前调用它

我知道这可以通过在每个 ajax 之前调用它并测试返回来完成,但是我有大量的 ajax 调用。

我正在寻找的是在进行任何 ajax 调用之前触发的事件处理程序

像这样的东西:

$(ajax).beforeCall(function (event) {
    if (CheckSession()){
        event.ProceedWithCall;
    }
    else {
         //Stop the call;
         return false;
    }
});
4

3 回答 3

3

您可以像这样使用ajaxSetup和设置beforeSend函数:

$.ajaxSetup({
  beforeSend: function(){
            return !CheckSession();
      }
});

beforeSend 文档

一个预请求回调函数,可用于在发送之前修改 jqXHR(在 jQuery 1.4.x 中为 XMLHTTPRequest)对象。使用它来设置自定义标题等。jqXHR 和设置映射作为参数传递。这是一个 Ajax 事件。* 在 beforeSend 函数中返回 false 将取消请求。

ajaxSetup 文档

说明:为未来的 Ajax 请求设置默认值。

于 2012-04-26T11:09:26.737 回答
1

使用 beforeSend(jqXHR, settings) 回调:

一个预请求回调函数,可用于在发送之前修改 jqXHR(在 jQuery 1.4.x 中为 XMLHTTPRequest)对象。使用它来设置自定义标题等。jqXHR 和设置映射作为参数传递。这是一个 Ajax 事件。在 beforeSend 函数中返回 false 将取消请求。

有关更多信息,请参阅http://api.jquery.com/jQuery.ajax/

于 2012-04-26T11:03:14.357 回答
0

就个人而言,我可能会这样做,以便调用会话检查逻辑的是您的 ASP.NET 端点,而不是客户端 Javascript。

想一想:您触发了一个 AJAX 调用,该调用会启动 .NET 代码来检查会话,返回一个布尔值,然后触发另一个 AJAX 调用 if true. 为什么不直接触发真正的AJAX 调用(即 AJAX 调用 2),并让 ASP.NET 端点处理您使用 AJAX 调用 1 调用的任何内容?

您将通过这种方式节省 HTTP 请求往返行程,考虑到您已经获得了tons of AJAX calls.

只是我的两分钱。尽管如此,我会选择上面@gdoron的回答。

于 2012-04-26T11:17:05.247 回答