似乎有两种方法可以构建jQuery的成功回调,一种形式有3个参数,另一种形式只有1.哪一种是正确的,为什么两种形式都出现了呢?
答案 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)
then
和done
方法并不关心您的回调有多少参数。 jQuery Promise 1 可以使用多个参数解析,所有这些参数都将传递给您的回调。您真正想要/需要使用的是哪个以及有多少是您的业务。
一些例子:
.promise
使用单个参数(元素集合)解析。$.ready.promise
使用jQuery
函数Animation
promises使用两个参数解析$.ajax
承诺使用success, statusText, jqXHR
参数$.when(promise1, promise2, promise3, …)
承诺以任意多个参数解决promise.then(function() { return … })
承诺使用单个…
值1:请注意,几乎所有其他承诺库仅为单个值设置承诺,例如,请参阅here。