理解jQuery的jqXHR

时间:2011-10-03 18:05:42

标签: javascript jquery

我有一组$.get()个请求需要重构才能包含失败回调。请求的格式为

$.get(url,
      {},
      function(data) {//success, do work
      //work
      },'json');//or 'html'

根据jQuery API,我只需添加一个jqHXR对象。所以在我的情况下,我相信我应该做

var jqxhr =  $.get(url,
          {},
          function(data) {//success, do work
          //work
          },'json').error(function() { alert("error"); });//or 'html'

我不明白the example中第二次成功回调的原因。我想它可以用于建立一个回调链。我希望错误执行错误,并成功执行成功。那么,这是正确的吗?

3 个答案:

答案 0 :(得分:12)

我认为示例中的第二个成功回调就是说明,使用此语法,您可以为successerrorcomplete事件提供多个处理程序。在标准的jQuery .ajax()方法中,您只能为每个事件分配一个处理程序。我无法想象需要多个处理程序的示例,但它看起来更清晰,更像是使用的标准jQuery习惯用法

$.get('my_url.php')
    .success(handlerOne)
    .success(handlerTwo);

而不是

$.get('my_url.php', function(data, textStatus, jqXHR) {
    handlerOne(data, textStatus, jqXHR);
    handlerTwo(data, textStatus, jqXHR);
});

但是,在您的情况下,将$.get()语句转换为$.ajax()可能会更容易,更简洁。大多数jQuery程序员可能更熟悉$.ajax()语法,并且由于您不需要其他语法中提供的特殊功能(多个处理程序,后请求处理程序分配),因此没有理由不使用{ {1}}:

$.ajax()

答案 1 :(得分:4)

这个页面有很多关于jqXHR(jQuery XHR)与XHR(XMLHttpRequest)有什么不同的文档。

http://api.jquery.com/jQuery.ajax/#jqXHR

答案 2 :(得分:2)

您使用的代码应该没问题。第二个成功只是另一个可以定义成功方法的地方。有些人使用jqxhr成功而不是传递给$.get()的成功,而其他人使用延迟对象的done处理程序来做同样的事情。