gpt4 book ai didi

jquery - 全局过滤ajax成功处理程序

转载 作者:行者123 更新时间:2023-12-01 02:44:12 24 4
gpt4 key购买 nike

我正在开发一个单页 ASP.NET MVC 3 应用程序。所有帖子均由 ajax 完成来电。用户几乎可以看到页面上的所有内容,但某些操作需要用户登录。

如果某个操作需要登录,如果用户未登录,我会返回一个 JSON {unauthenticated: true} 。所以我有几个成功处理程序,例如:

success : function(response){
if(response.unauthenticated){
showLoginDialog();
} else {
doTheActualWork();
}
}

我想在全局范围内做success处理程序。喜欢:

$(document).ajaxSuccess(function (event, XMLHttpRequest, ajaxOptions){
if(unauthenticated()){
preventTheLocalSuccess();
showLoginDialog();
}
});

本地成功处理程序将是:

success: function(response){
// No Checking
doTheActualWork();
}

有办法做到这一点吗?

最佳答案

您应该看看 dataFilter property of $.ajax 。此属性接受一个函数,该函数在您收到请求后但在执行任何处理程序之前执行。这样做的主要目的是在 jQuery 本身处理接收到的数据之前对其进行预处理。因此,您将收到原始数据。您可以在那里执行中间流程,例如登录。

要将此配置修补到所有 ajax 调用,我们使用 $.ajaxSetup为所有ajax请求预定义dataFilter。因此,每个 ajax 请求都会在本地处理程序执行之前执行一个 dataFilter 处理程序。

至于示例代码,here's a demo, which pretty much works as expected :

function login() {
console.log('login initiated: you are not logged in');
}

$.ajaxSetup({
dataFilter: function (origdata, type) {

//the type is determined by the type you indicated in the ajax call
//if not json, we return the data unharmed
if (type !== 'json') return origdata;

//data filter receives the raw response. since we have determined it's json
//we parse it using jQuery's parseJSON to check the contents
var data = $.parseJSON(origdata);

if (data.auth) {
//if logged in, we just return the data
return origdata;
} else {
//otherwise, we execute the login
//since returning something is required, we return false so local handler
//data checks will fail against the false data
login();
return false;
}
}
});

//the url and data passed is for jsFiddle to work.

//logged in
$.post('/echo/json/', {
json: JSON.stringify({
auth: true
})
}, function (data) {
//in our handler, it's your normal "check data before use"
//if data is truthy, it skips this check and moves on
if(!data) return;
console.log('data retrieved successfully', data);
}, 'json');

//not logged in
$.post('/echo/json/', {
json: JSON.stringify({
auth: false
})
}, function (data) {
//since we returned false, the code stops at this check
if (!data) return;
console.log('you should not see this since data is false, per dataFilter return', data);
}, 'json');

关于jquery - 全局过滤ajax成功处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16259230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com