C# ajax加载程序有时不追加
我正在使用.net构建web应用程序,并使用ajax从服务器获取一些数据。 我想为每个函数创建自定义ajax加载程序,比如:如果它要删除某个东西,我想调用函数X(),如果它要保持会话活动,我根本不想加载,如果它要获取用户的数据,我想调用函数Y()。 我知道,如果我调用C# ajax加载程序有时不追加,c#,javascript,.net,ajax,C#,Javascript,.net,Ajax,我正在使用.net构建web应用程序,并使用ajax从服务器获取一些数据。 我想为每个函数创建自定义ajax加载程序,比如:如果它要删除某个东西,我想调用函数X(),如果它要保持会话活动,我根本不想加载,如果它要获取用户的数据,我想调用函数Y()。 我知道,如果我调用$(document).ajaxStart(),那么从现在起每次ajax调用启动时,都会运行相同的函数。 因为我想要不同的功能,这是我尝试的: function X() { var flag = true; $(do
$(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()函数做了另一个,然后在ajax调用之前,我调用了X或Y。
问题是,有时加载函数不起作用,仅当我再次单击它的触发次数时,但即使它不起作用,ajax调用也会在后台运行。
有一种更好的方法可以将自定义ajax loaderr设置为其他操作?我做错了什么?您可以创建一个for jQueryajax
函数,在其中处理进度:
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);
您可以像调用jQuery.ajax
一样调用新的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);
就个人而言,我更喜欢第一种方法,因为它更透明一些
希望这有帮助。不知道您使用的是什么JS库,代码也不完整,但您可能希望查看JSONP,这样您就可以有一个AJAX例程,并根据服务器结果调用所需的函数。