ajax loader有时候不会追加

时间:2013-12-31 06:39:33

标签: c# javascript .net ajax

我正在使用.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用于其他操作吗?我做错了什么?

1 个答案:

答案 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);

就个人而言,我更喜欢第一种方法,因为它更透明。

希望这有帮助。