123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- $(function(){
- var root = window || {};
- root.GravAjax = function (url, settings) {
- settings = typeof settings === 'undefined' ? typeof url === 'string' ? {} : url : settings;
- settings.url = typeof settings.url === 'undefined' && typeof url === 'string' ? url : settings.url;
- var callbacks = {
- success: typeof settings.success !== 'undefined' ? typeof settings.success === 'function' ? [ settings.success ] : settings.success : [],
- error: typeof settings.error !== 'undefined' ? typeof settings.error === 'function' ? [ settings.error ] : settings.error : []
- };
- if (settings.toastErrors) {
- callbacks.error.push(root.GravAjax.toastErrorHandler);
- delete settings.toastErrors;
- }
- delete settings.success;
- delete settings.error;
- var deferred = $.Deferred(),
- jqxhr = $.ajax(settings);
- jqxhr.done(function (response, status, xhr) {
- var responseObject = {
- response: response,
- status: status,
- xhr: xhr
- };
- switch (response.status) {
- case "unauthenticated":
- document.location.href = GravAdmin.config.base_url_relative;
- throw "Logged out";
- break;
- case "unauthorized":
- responseObject.response.message = responseObject.response.message || "Unauthorized.";
- root.GravAjax.errorHandler(deferred, callbacks, responseObject);
- break;
- case "error":
- responseObject.response.message = responseObject.response.message || "Unknown error.";
- root.GravAjax.errorHandler(deferred, callbacks, responseObject);
- break;
- case "success":
- root.GravAjax.successHandler(deferred, callbacks, responseObject);
- break;
- default:
- responseObject.response.message = responseObject.response.message || "Invalid AJAX response.";
- root.GravAjax.errorHandler(deferred, callbacks, responseObject);
- break;
- }
- });
- jqxhr.fail(function (xhr, status, error) {
- var response = {
- status: 'error',
- message: error
- };
- root.GravAjax.errorHandler(deferred, callbacks, { xhr: xhr, status: status, response: response});
- });
- root.GravAjax.jqxhr = jqxhr;
- return deferred;
- };
- root.GravAjax.successHandler = function (promise, callbacks, response) {
- callbacks = callbacks.success;
- for (var i = 0; i < callbacks.length; i++) {
- if (typeof callbacks[i] === 'function') {
- callbacks[i](response.response, response.status, response.xhr);
- }
- }
- promise.resolve(response.response, response.status, response.xhr);
- };
- root.GravAjax.errorHandler = function (promise, callbacks, response) {
- callbacks = callbacks.error;
- for (var i = 0; i < callbacks.length; i++) {
- if (typeof callbacks[i] === 'function') {
- callbacks[i](response.xhr, response.status, response.response.message);
- }
- }
- promise.reject(response.xhr, response.status, response.response.message);
- };
- root.GravAjax.toastErrorHandler = function (xhr, status, error) {
- if (status !== 'abort') {
- toastr.error(error);
- }
- };
- });
|