【发布时间】:2021-02-14 15:49:42
【问题描述】:
我想基本上为 ajax done 和 fail 处理程序创建一个新的函数签名...鉴于下面的简化示例,我只是想附加 resource 作为要发送到的最后一个参数处理程序。
const customAjax = function( url, resource ) {
const p = $.ajax({
converters: {
'text script': function (text: string) {
return text;
}
},
url: url + "?" + resource
}).then(
function () {
[].push.apply(arguments, [resource]);
return arguments;
},
function() {
[].push.apply(arguments, [resource]);
return arguments;
}
);
return p;
};
那么首选的用法是这样的:
customAjax( "url", "resourceKey" )
.done( function( data, textStatus, jqXHR, resourceName ) { /* do something */ } )
.fail( function( jqXHR, textStatus, errorThrown, resourceName ) { /* do something */ } );
问题是,在这两个处理程序中,只有一个参数。 javascript arguments 对象。所以,要访问我真正想要的每个参数,我必须这样做:
customAjax( "url", "resourceKey" )
.done( function( args ) {
var data = args[ 0 ];
var textStatus = args[ 1 ];
var jqXHR = args[ 2 ];
var resourceName = args[ 3 ];
/* do something */
} )
.fail( function( args ) {
var jqXHR = args[ 0 ];
var textStatus = args[ 1 ];
var errorThrown = args[ 2 ];
var resourceName = args[ 3 ];
/* do something */
} );
有什么方法可以让它按照我喜欢的方式工作吗?
更新 - 不知道如何与结束我的问题的人沟通,但我不知道引用的“重复”问题如何回答/解决我的问题。
【问题讨论】:
-
您必须覆盖返回对象的
fail和done属性。我不会那样做的。坚持使用原生支持 JavaScript 的 Promise 接口;它比特定的 jQuery 界面更有前途。
标签: javascript ajax es6-promise