我正在创建一个应用程序,我对远程服务器进行了大量的ajax调用并广泛使用它们。由于代码在所有调用中几乎相同,我想创建一个可以重用的新函数。我很高兴为“data”参数定义参数结构。我将在下面解释我的问题。
下面提供了我当前的ajax调用示例。
当前通话样本:
$.ajax({
beforeSend: function() {
$.mobile.loading('show');
},
complete: function() {
$.mobile.loading('hide');
},
type: 'GET',
url: 'http://localhost/test-url/',
crossDomain: true,
data: {appkey: '1234567', action: 'action1','name':'me'},
dataType: 'jsonp',
contentType: "application/javascript",
jsonp: 'callback',
jsonpCallback: 'mycallback',
async: false,
error: function() {
//some operations
},
success: function(data) {
//some operations
}
});
我创建的可重复使用的功能:
function newAjax(parm, successCallback, errorCallback) {
$.ajax({
beforeSend: function() {
$.mobile.loading('show');
},
complete: function() {
$.mobile.loading('hide');
},
type: 'GET',
url: 'http://localhost/test-url',
crossDomain: true,
data: {appkey: '1234567', parm: parm},
dataType: 'jsonp',
contentType: "application/javascript",
jsonp: 'callback',
jsonpCallback: 'mycallback',
async: false,
success: function() {
successCallback();
},
error: function() {
errorCallback();
}
});
}
问题:
我将通过“parm”参数传递ajax调用的参数。我希望将数据值直接添加到父“data”参数中。而不是作为数据的子对象。所有通话中的appKey保持不变,因此我将其保留在实际功能中。
我希望成功和错误回调函数都是可选的。如果没有提供,则应予以忽略。
答案 0 :(得分:5)
您可以使用jQuery.extend
方法将两个或多个对象组合在一起。
data: jQuery.extend({appkey: '1234567'}, parm),
您可以使用successCallback
检查您是否实际传递了errorCallback
和typeof var === 'function'
的功能;
success: function () {
if (typeof successCallback === 'function') {
successCallback();
}
},
error: function () {
if (typeof errorCallback === 'function') {
errorCallback();
}
}
...如果您刚刚返回由AJAX请求创建的Promise,它可能是 nicer ,并让调用者添加他们的成功,如果他们想要错误处理程序;
function newAjax(parm) {
return jQuery.ajax({
/* as before, but without success and error defined */
});
}
......然后:
newAjax().done(function () {
// Handle done case
}).fail(function () {
// Handle error case.
});
如果调用者不想添加错误处理程序,他们就不会调用fail()
;
newAjax().done(function () {
// Handle done case
});