返回值:jQueryajaxSend(handler(event, XMLHttpRequest, ajaxOptions))

注册一个事件处理函数,这个函数会在 Ajax 请求之前调用。这是一个 Ajax 事件

当 Ajax 请求将要发送前,jQuery 会触发 ajaxSend 事件。任何先前通过 .ajaxSend() 方法注册的事件处理函数都会在此刻执行。

为了实际研究这个方法,我们构建一个简单的 Ajax load 请求:

<div class="trigger">Trigger</div>
<div class="result"></div>
<div class="log"></div>

我们可以把我们的事件处理函数附加到任何元素上:

$('.log').ajaxSend(function() {
  $(this).text('Triggered ajaxSend handler.');
});

现在,我们可以用任意 jQuery 方法来发送一个 Ajax 请求,比如在 click 中发送一个请求:

$('.trigger').click(function() {
  $('.result').load('ajax/test.html');
});

当用户点击按钮,接着 Ajax 请求将要开始前,会显示日志信息。

注意: 由于 .ajaxSend() 是作为一个 jQuery 对象实例的方法来实现的,所以我们在回调函数中可以通过 this 关键字来指向原先所选中的元素。

无论是哪一个 Ajax 请求将要发送前, ajaxSend 处理函数都会被执行。如果有时必须区分出不同的请求,我们可以使用传递给事件处理函数的参数来识别不同的请求。每次 ajaxSend 的事件处理函数执行时,都会传递一个事件对象,一个 XMLHttpRequest 对象,以及一个 settings 参数对象。其中 settings 参数对象就是调用 Ajax 请求时,传递给 $.ajax 方法的 settings 对象(有时候是在 jQuery 内部传递的,比如用 load 方法时,jQuery 内部也会调用 $.ajax 方法,并且构造并传递一个 settings 参数)。通过 settings 对象,我们就可以用来确定这是哪一个请求。比如说,我们可以限定某个回调函数,仅仅处理某个特定的 URL:

$('.log').ajaxSend(function(e, xhr, settings) {
  if (settings.url == 'ajax/test.html') {
    $(this).text('Triggered ajaxSend handler.');
  }
});

示例:

在 Ajax 请求将要发送前显示一条信息。

jQuery 代码:
$("#msg").ajaxSend(function(evt, request, settings){
        $(this).append("<li>Starting request at " + settings.url + "</li>");
      });