我有来自我的代码的不同功能的50多个AJAX调用.所有这些调用都有类似的结构,具有不同的data / url / callback参数:
var jqXHR = $.post('/dba/port.PHP',{
mode: "del_wallfunds",pdata: cdata,wname: wName
},function (data) {},"json")
.done(function (data) {
var msg = data.msg;
if (msg.indexOf("Error") == -1) {
alertify.success(msg);
delSelected(selGroup);
} else {
alertify.error(msg);
}
})
.fail(function () {
alertify.error("Error .....");
});
我在想如何编写一个函数来返回var jqXHR以最小化代码的总大小.传递所有静态变量(如URL,错误字符串等)不是问题.但问题是“.done”上的所有回调函数都不同,我不知道如何将这些回调函数作为变量传递.
一种方法是在.done上调用单个“通用”函数并将“switch”变量传递给该函数,但它似乎不是一个优雅的解决方案.
有什么建议如何以优雅的方式?
谢谢
最佳答案
在调用函数时将完成的回调函数作为参数传递:
原文链接:https://www.f2er.com/jquery/428244.htmlfunction ajaxCall(url,data,doneCallback) {
return $.post(url,doneCallback,"json").fail(...);
// or
return $.post(url,function() {},"json").done(doneCallback).fail(...);
}
var jqXhr = ajaxCall('yoururl.PHP',{key: 'value'},function(data) {
// do something
});
或者从函数返回jqXhr对象,然后分配完成的回调:
function ajaxCall(url,data) {
return $.post(url,"json").fail(...);
}
var jqXhr = ajaxCall('yoururl.PHP',{key: 'value'});
jqXhr.done(function(data) {
// do something
});
或者切换到使用jQuery.ajax(),并传递整个选项对象:
function ajaxCall(options) {
return $.ajax(options).fail(...);
}
var jqXhr = ajaxCall({
url: 'yoururl.PHP',data: {key: 'value'},dataType: 'json'
});
jqXhr.done(function(data) {
// do something
});