我正在使用.net构建Web应用程序,我正在使用ajax从服务器获取一些数据。
我想为每个函数制作自定义ajax加载器,如:如果它要删除somthing我想调用函数X()如果它保持活动会话我根本不想加载,如果它获取用户的数据我想要函数Y()。
我知道,如果我呼叫$(document).ajaxStart(
,那么每次从ajax调用开始的时候都会运行相同的函数。
因为我想尝试不同的功能:
function X() {
var flag = true;
$(document).ajaxStart(function () {
if (flag) {
$('#loadDiv').show();
}
});
$(document).ajaxStop(function () {
if (flag) {
$('#loadDiv').hide();
flag = false;
}
});
我为Y()函数做了另一个,然后在调用X或Y的ajax调用之前。 问题是,有时加载功能不起作用,只有当我点击几次它的触发,但即使它不工作,ajax调用正在后台运行。 有一种更好的方法可以将自定义ajax loaderr用于其他操作吗?我做错了什么?
答案 0 :(得分:0)
您可以为jQuery ajax
函数创建facade,您可以在其中处理进度:
ajax = (function ($) {
function showProgress() { $('#loadDiv').show(); }
function hideProgress() { $('#loadDiv').hide(); }
function ajax(url, parameters) {
// We don't want to mutate the state of "parameters".
var copy = $.extend(parameters, {});
if (copy.progress) {
// Showing the progress.
showProgress();
// On completion (success or error) hiding the progress.
if (copy.complete) {
copy.complete = function() {
hideProgress();
copy.complete.apply(this, arguments);
};
} else {
copy.complete = hideProgress;
}
}
return $.ajax(url, copy);
}
return ajax;
})(jQuery);
您可以将新的ajax
功能调用与调用jQuery.ajax
的功能相同,但现在您可以指定一个名为progress
的附加参数,该参数指示是否显示进度指示器:
ajax('/my/url', {
type: 'get',
success: function() { ... },
progress: true
});
作为替代方案(如果您不喜欢自定义ajax
功能的存在),您可以为jQuery.ajax
设置代理:
(function ($) {
function showProgress() { $('#loadDiv').show(); }
function hideProgress() { $('#loadDiv').hide(); }
var ajaxOriginal = $.ajax;
$.ajax = function(url, parameters) {
// Same as above but you need to call "ajaxOriginal"
// internally instead of "$.ajax".
};
})(jQuery);
就个人而言,我更喜欢第一种方法,因为它更透明。
希望这有帮助。