I have two functions that are very similar and I would like if possible to bine them. The only issue that I have is one function is accepting 2 arguments and the other one is accepting 3. Is there a way to do this or these two functions have to stay separated by design?
function getClientData(id, mand) {
var formData = {
'method': mand,
'id': id
};
getEntityData(formData);
}
function getLocation(id, clientid, mand) {
var formData = {
'method': mand,
'locationid': id,
'clientbrandid': clientid
};
getEntityData(formData);
}
Update
function getEntityData(data) {
var url = '/../admin/miscellaneous/ponents/global.cfc?wsdl';
var ajaxResponse = $.ajax({
url: url,
dataType: 'json',
data: data,
global: false,
async:false,
cache: false,
success: function(apiResponse){
return apiResponse;
}
}).responseJSON;
var response = ajaxResponse[0];
for (var i in response) {
if (response.hasOwnProperty(i)){
$("#edit"+i).val(response[i].trim());
}
}
}
I have two functions that are very similar and I would like if possible to bine them. The only issue that I have is one function is accepting 2 arguments and the other one is accepting 3. Is there a way to do this or these two functions have to stay separated by design?
function getClientData(id, mand) {
var formData = {
'method': mand,
'id': id
};
getEntityData(formData);
}
function getLocation(id, clientid, mand) {
var formData = {
'method': mand,
'locationid': id,
'clientbrandid': clientid
};
getEntityData(formData);
}
Update
function getEntityData(data) {
var url = '/../admin/miscellaneous/ponents/global.cfc?wsdl';
var ajaxResponse = $.ajax({
url: url,
dataType: 'json',
data: data,
global: false,
async:false,
cache: false,
success: function(apiResponse){
return apiResponse;
}
}).responseJSON;
var response = ajaxResponse[0];
for (var i in response) {
if (response.hasOwnProperty(i)){
$("#edit"+i).val(response[i].trim());
}
}
}
Share
Improve this question
edited Apr 24, 2014 at 22:32
Geo
asked Apr 24, 2014 at 22:15
GeoGeo
3,2007 gold badges44 silver badges87 bronze badges
2
- Really you have 4 parameters as id and locationid are passed to getEntityData with different names. Are they the same thing? You haven't shown what getEntityData does. – RobG Commented Apr 24, 2014 at 22:26
-
I will update now. The getEntityData is just an ajax function which takes the data in the
data:
section. – Geo Commented Apr 24, 2014 at 22:31
4 Answers
Reset to default 4yes you can, I prefer instead of passing each parameter you can pass a js object, and decide wich params it contains for example:
function getLocation(options) {
getEntityData(options);
}
and your call should be:
getLocation({'method': mand,'id': id})
Update
or you can just avoid getLocation function and just call getEntityData
getEntityData({
'method': mand,
'id': id
});
I would go with:
function getWhatever(id, mand, clientId) {
var formData = { method: mand };
if (typeof clientId === 'undefined') {
formData.id = id;
} else {
formData.locationid = id;
formData.clientbrandid = clientId;
}
getEntityData(formData);
}
function getLocation(id, clientid, mand) {
var formData = {
'method': mand,
'locationid': id
};
if (clientid) {
formData['clientbrandid'] = clientid;
}
getEntityData(formData);
}
// With
getLocation(1, 2, 'doStuff');
// Without
getLocation(1, '', 'doStuff');
Maybe a more rational order of arguments:
function getLocation(id, mand, clientid) {
var formData = {
'method': mand,
'locationid': id
};
if (clientid) {
formData['clientbrandid'] = clientid;
}
getEntityData(formData);
}
// With
getLocation(1, 'doStuff', 2);
// Without
getLocation(1, 'doStuff');
And if locationid
and id
are different:
function getLocation(id, mand, clientid) {
if (clientid) {
var formData = {
'method': mand,
'locationid': id,
'clientbrandid': clientid
};
} else {
var formData = {
'method': mand,
'id': id,
};
}
getEntityData(formData);
}
// With
getLocation(1, 'doStuff', 2);
// Without
getLocation(1, 'doStuff');
I guess it really depends on what your arguments actually are, but this is also a solution. (Assuming that client id is an object).
function getLocation(id, mand, clientid) {
var _clientId = clientid || {};
var formData = {
'method': mand,
'locationid': id,
'clientbrandid': _clientid
};
getEntityData(formData);
}