如果value为false(在任何ajax调用之前),则停止ajax调用

时间:2012-04-26 11:00:32

标签: jquery ajax asp.net-mvc-3

我正在开发一个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调用该操作将返回true或false的操作。

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

有没有办法做到这一点无需通过所有代码并在每次ajax调用之前调用它

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

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

类似的东西:

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

3 个答案:

答案 0 :(得分:3)

您可以使用ajaxSetup并设置beforeSend功能,如下所示:

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

beforeSend docs

  

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

ajaxSetup docs

  

描述:为将来的Ajax请求设置默认值。

答案 1 :(得分:1)

使用beforeSend(jqXHR,settings)回调:

  

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

请参阅http://api.jquery.com/jQuery.ajax/了解详情。

答案 2 :(得分:0)

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

考虑一下:你启动了一个AJAX调用,该调用启动.NET代码来检查会话,返回一个布尔值,并在true时触发另一个AJAX调用。为什么不直接激活真正的 AJAX调用(即AJAX调用2),并让ASP.NET端点用你用AJAX调用1调用的任何东西来解决它?

您将以这种方式保存HTTP请求往返,考虑到您已tons of AJAX calls,这可能会带来显着的收益。

只是我的两分钱。但是,除此之外,我会选择@gdoron的答案。