I am submitting my form using ajax. Here is the actual code:
// generic ajax caller
function ajaxHandler(url, data, options)
{
return $.ajax($.extend({
type: 'POST',
url: url,
dataType: 'json',
data: data,
success: function (data) {
return data;
},
error: function (xhr, textStatus, error) {
return error;
},
}, options))
};
// This code handles course submission form
$('#add-course').on('submit', function (e) {
e.preventDefault();
var form = $(this);
ajaxHandler(form.url, form.serialize()).then(function (result) {
console.log('#############');
$('.field-error, .success, .error').remove();
if(result.errorType == "fieldErrors")
{
// handle field errors
$.each(result.data, function (key, value) {
console.log(key, value);
$('<span class="field-error"> ' + value.msg + '</span>').insertBefore('#' + value.param);
});
}
else if(result.errorType == "formErrors")
{
// handle form errors
$('<p class="error">' + result.message + '</p>').insertBefore(form);
}
else
{
// success
form[0].reset();
$('<p><span class="success">' + result.message + '</span></p>').insertBefore(form);
}
})
.fail(function (error) {
$('<p ><span class="error">Error connecting server</span></p>').insertBefore(form);
});
});
// Here is code which handles update course form
$('#change-course').on('submit', function (e) {
e.preventDefault();
var form = $(this);
ajaxHandler(form.url, form.serialize()).then(function (result) {
$('.field-error, .success, .error').remove();
if(result.errorType == "fieldError")
{
// handle field errors
$.each(result.data, function (key, value) {
console.log(key, value);
$('<span class="field-error"> ' + value.msg + '</span>').insertBefore('#' + value.param);
});
}
else if(result.errorType == "formError")
{
// handle form errors
$('<p><span class="form-error">' + result.message + '</span></p>').insertBefore(form);
}
else
{
// success
$('<p><span class="success">' + result.message + '</span></p>').insertBefore(form);
}
})
.fail(function (error) {
$('<p><span class="error">Error connecting server</span></p>').insertBefore(form);
});
});
As you can see the structure of add/update form is almost the same. How can I refactor all this?
$.extend()to merge theoptionsparameter ofajaxHandler()with the rest of the data? You don't seem to be passing anything tooptionseither time you callajaxHandler()... \$\endgroup\$