为什么jQuery成功回调有时会有3个参数,有时只有1个?

时间:2015-02-25 19:21:54

标签: javascript jquery ajax promise

似乎有两种方法可以构建jQuery的成功回调,一种形式有3个参数,另一种形式只有1.哪一种是正确的,为什么两种形式都出现了呢?

3 个答案:

答案 0 :(得分:1)

查看文档中的success函数:http://api.jquery.com/jquery.ajax/

Function( Anything data, String textStatus, jqXHR jqXHR ) A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter or the dataFilter callback function, if specified; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object.

因此,成功函数可以采用3个参数:返回的数据,响应的状态和XHR对象。大多数情况下,您只需要第一个参数。

答案 1 :(得分:0)

也许你想知道为什么这两种ajax使用都有效?

$.post(url, callback-when-success);
$.post(url, data-to-be-posted, callback-when-success, server-return-datatype);

让我们看看$.post()

的实现(源代码)
jQuery.post = function( url, data, callback, type ) {
    /** the trick is right here ! **/
    // shift arguments if data argument was omitted
    if ( jQuery.isFunction( data ) ) {
        type = type || callback;
        callback = data;
        data = undefined;
    }

    return jQuery.ajax({
        url: url,
        type: method,
        dataType: type,
        data: data,
        success: callback
    });
    };
});

事实上,$.post()总是需要四个参数,如果省略data-to-be-posted(应该在第二个位置)参数,success-callback放在第二个参数上-position,然后data将被指定为undefined,而success-callback仍将是success-callback

答案 2 :(得分:0)

thendone方法并不关心您的回调有多少参数。 jQuery Promise 1 可以使用多个参数解析,所有这些参数都将传递给您的回调。您真正想要/需要使用的是哪个以及有多少是您的业务。

一些例子:

  • 动画队列.promise使用单个参数(元素集合)解析。
  • $.ready.promise使用jQuery函数
  • 解析
  • 内部使用的Animation promises使用两个参数解析
  • $.ajax承诺使用success, statusText, jqXHR参数
  • 解析
  • $.when(promise1, promise2, promise3, …)承诺以任意多个参数解决
  • promise.then(function() { return … })承诺使用单个
  • 解析

1:请注意,几乎所有其他承诺库仅为单个值设置承诺,例如,请参阅here