45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
(function($, undefined) {
|
|
var form_ext;
|
|
$.form_ext = form_ext = {
|
|
ajax: function(options) {
|
|
return $.ajax(options);
|
|
},
|
|
handleRemote: function(element) {
|
|
var method = element.attr('method');
|
|
var url = element.attr('action');
|
|
var data = element.serializeArray();
|
|
var options = {
|
|
type: method || 'GET',
|
|
data: data,
|
|
dataType: 'text json',
|
|
success: function(data, status, xhr) {
|
|
element.trigger("ajax:success", [data, status, xhr]);
|
|
},
|
|
complete: function(xhr, status) {
|
|
element.trigger("ajax:complete", [xhr, status]);
|
|
},
|
|
error: function(xhr, status, error) {
|
|
element.trigger("ajax:error", [xhr, status, error]);
|
|
}
|
|
}
|
|
if(url) { options.url = url; }
|
|
return form_ext.ajax(options)
|
|
},
|
|
CSRFProtection: function(xhr) {
|
|
var token = $.cookie('csrftoken');
|
|
if (token) xhr.setRequestHeader('X-CSRFToken', token);
|
|
}
|
|
}
|
|
$.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { form_ext.CSRFProtection(xhr); }});
|
|
$(document).delegate('form', 'submit', function(e) {
|
|
var form = $(this),
|
|
remote = form.data("remote") !== undefined;
|
|
|
|
if(remote) {
|
|
form_ext.handleRemote(form);
|
|
return false;
|
|
}
|
|
|
|
});
|
|
})(jQuery);
|