我正在开发一个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;
}
});
答案 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 功能将取消请求。
答案 2 :(得分:0)
就个人而言,我可能会这样做,因为它是你的ASP.NET端点调用会话检查逻辑,而不是客户端Javascript。
考虑一下:你启动了一个AJAX调用,该调用启动.NET代码来检查会话,返回一个布尔值,并在true
时触发另一个AJAX调用。为什么不直接激活真正的 AJAX调用(即AJAX调用2),并让ASP.NET端点用你用AJAX调用1调用的任何东西来解决它?
您将以这种方式保存HTTP请求往返,考虑到您已tons of AJAX calls
,这可能会带来显着的收益。
只是我的两分钱。但是,除此之外,我会选择@gdoron的答案。