我正在使用ajax实用程序函数来发出请求
function ajaxHandler(url, data)
{
return new Promise(function (resolve, reject) {
$.ajax({
type: 'POST',
url: url,
dataType: 'json',
data: data,
success: function (data) {
resolve(data);
},
error: function (xhr, textStatus, error) {
reject(error);
},
});
})
}
默认设置大部分时间都有效,但在很多情况下,我希望传递其他参数,例如processData
和contentType
。对于此类案件,如何通过processData
和contentType
?
答案 0 :(得分:3)
假设options
是您要传入的对象;将配置对象移出函数是最干净的。然后使用$.extend
更新默认值
function ajaxHandler(url, data, options) {
var config = {
type: 'POST',
url: url,
dataType: 'json',
data: data
}
if (options && $.type(options) == 'object') {
$.extend(config, options);
}
return $.ajax(config)// add a global error handler if desired
}
用法:
ajaxHandler('path/to/server', {foo:'bar'), {type:'GET'})
.then(function(data){
console.log(data);
}).fail(function(){// or `catch` in jQuery version >=3
// handle error
})
请注意,$.ajax
会返回" thenable" 承诺,因此使用new Promise
是一种反模式。见What is the explicit promise construction antipattern and how do I avoid it?
答案 1 :(得分:1)
我不确定我是否做对了,如果你想添加和覆盖对象的设置你可以使用$ .extend
function ajaxHandler(url, data, extraSettings)
{
return new Promise(function (resolve, reject) {
$.ajax($.extend({
type: 'POST',
url: url,
dataType: 'json',
data: data,
success: function (data) {
resolve(data);
},
error: function (xhr, textStatus, error) {
reject(error);
},
}, extraSettings));
})
}
这样$ .extend(obj1,obj2)返回obj1添加或覆盖obj2的属性。
您可以像以下一样使用它: ajaxHanler(“url”,“data”,{contentType:“text / plain”});