I have an application which currently uses AJAX for CRUD operations on a simple Person
object. The following script works fine, but I'm looking for some pointers on how to structure my code. Currently, I have four methods for CRUD operations, and I'll extend my person
module as needed, but I was hoping to get an idea of whether or not this is a nice way to manage code.
$(document).ready(function () {
//open the modal
//the update, delete and insert functions come from boxes present in a modal not shown
$('#openModal').click(function () {
$('#contact').modal();
});
//insert
$('#btnSavePerson').click(function () {
//is it a good idea to have the data objects inside all of these functions?
var data = {
personId: $('#tbPersonId').val(),
firstName: $('#tbFirstName').val(),
lastName: $('#tbLastName').val()
};
person.insert(data);
});
//delete
$('#btnDeletePerson').click(function () {
var personId = $('#tbDelete').val();
person.remove(personId);
});
//update
$('#btnUpdatePerson').click(function () {
var data = {
personId: $('#tbPersonId').val(),
firstName: $('#tbFirstName').val(),
lastName: $('#tbLastName').val()
};
console.log(JSON.stringify(data));
person.update(data);
});
//get
$('#getPeople').click(function () {
person.get();
});
//*********************person module
var person = (function () {
//the ajax object will be passed and shared between
//the functions here (type and dataType dont change in this example)
var ajax = {
type: "POST",
url: "",
data: {},
dataType: "json",
contentType: "application/json",
success: {},
error: {}
}
//************ insert
function insert(data) {
ajax.url = '../Service.asmx/InsertPerson';
ajax.success = function () {
console.log('success before setTimeout');
var successMessage = $('<div>').text('Successfully added to the database...')
.css('color', 'green')
.attr('id', 'success');
$('.modal-body').append(successMessage);
window.setTimeout(function () {
$('.modal-body').each(function () {
$(this).val('');
});
$('#contact').modal('hide');
}, 1000);
}
ajax.data = JSON.stringify(data);
ajax.error = function (xhr, ajaxOptions) {
console.log(xhr.status);
console.log(ajaxOptions);
};
$.ajax(ajax);
}
//************* delete
function remove(data) {
ajax.url = '../Service.asmx/DeletePerson';
console.log('working string: ');
var obj = { personId: data };
console.log(JSON.stringify(obj));
ajax.data = JSON.stringify(obj);
console.log(ajax.data);
ajax.success = function () {
console.log('person successfully deleted');
var successMessage = $('<div>').text('Person successfully deleted from the database')
.css('color', 'red');
$('.modal-body').append(successMessage);
window.setTimeout(function () {
$('.modal-body input').each(function () {
$(this).val('');
});
$('#contact').modal('hide');
}, 1000);
};
ajax.error = function (xhr, ajaxOptions) {
console.log(xhr.status);
console.log(ajaxOptions);
}
$.ajax(ajax);
}
//*************** update
function update(data) {
ajax.url = '../Service.asmx/UpdatePerson',
ajax.data = JSON.stringify(data),
ajax.success = function () {
console.log('update was successful');
var successMessage = $('<div>').text('Record successfully updated...')
.css('color', 'green');
$('modal-body').append(successMessage);
window.setTimeout(function () {
$('.modal-body input').each(function () {
$(this).val('');
});
$('#contact').modal('hide');
}, 1000);
};
ajax.error = function (xhr, ajaOptions) {
console.log(xhr.status);
};
$.ajax(ajax);
};
//************** get
function get() {
//****** appropriate to have this function here?
function style(json) {
json = $.parseJSON(json);
var $personArray = [];
for (var obj in json) {
var $person = $('<div>').addClass('person');
for (var prop in json[obj]) {
var label = $('<span>').text(prop).addClass('badge pull-left').appendTo($person);
var propertyData = $('<span>').text(json[obj][prop]).addClass('pull-right').appendTo($person);
}
$personArray.push($person);
}
return $personArray;
}
ajax.url = '../Service.asmx/GetPersons';
ajax.success = function (data) {
data = data.d;
console.log('ajax successful');
$('body').append(style(data));
};
ajax.error = function (xhr, ajaxOptions) {
console.log(xhr.status);
console.log(ajaxOptions);
}
$.ajax(ajax);
}
//*********** public methods
return {
insert: insert,
remove: remove,
update: update,
get: get
};
})();
});
HTML in case someone wants to see it:
<body>
<div class="navbar navbar-inverse navbar-static-top">
<div class="container">
<a href="#" class="navbar-brand">ui</a>
<button class="navbar-toggle" data-toggle="collapse" data-target=".navHeaderCollapse">
<span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar">
</span>
</button>
<div class="collapse navbar-collapse navHeaderCollapse">
<ul class="nav navbar-nav navbar-right">
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Blog</a></li>
<li><a id="openModal" href="#contact">Contact</a></li>
</ul>
</div>
</div>
</div>
<p id="getPeople" class="btn btn-block">get them peoples</p>
<div class="modal fade" id="contact" role="diaglog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h2>contact: </h2>
</div>
<div class="modal-body">
The improtant information from the database is going to be displayed here.
<span class="label label-success">Person ID: </span><input id="tbPersonId" class="warning" /><br />
<span class="label label-success">First Name:</span><input id="tbFirstName" /><br />
<span class="label label-success">Last Name: </span><input id="tbLastName" /><br />
<span class="label label-danger">Delete box: </span><input id="tbDelete" />
</div>
<div class="modal-footer">
<a class="btn btn-default" id="modalClose" >Close</a>
<a class="btn btn-primary" id="btnSavePerson">Save changes</a>
<a class="btn btn-danger" id="btnDeletePerson">Delete person</a>
<a class="btn btn-block" id="btnUpdatePerson">Update Person</a>
</div>
</div>
</div>
</div>
</body>