73 lines
1.8 KiB
JavaScript
73 lines
1.8 KiB
JavaScript
define('ajax', ['mailpoet', 'jquery', 'underscore'], function(MailPoet, jQuery, _) {
|
|
'use strict';
|
|
MailPoet.Ajax = {
|
|
version: 0.5,
|
|
options: {},
|
|
defaults: {
|
|
url: null,
|
|
endpoint: null,
|
|
action: null,
|
|
token: null,
|
|
data: {}
|
|
},
|
|
post: function(options) {
|
|
return this.request('post', options);
|
|
},
|
|
init: function(options) {
|
|
// merge options
|
|
this.options = jQuery.extend({}, this.defaults, options);
|
|
|
|
// set default url
|
|
if(this.options.url === null) {
|
|
this.options.url = ajaxurl;
|
|
}
|
|
|
|
// set default token
|
|
if(this.options.token === null) {
|
|
this.options.token = window.mailpoet_token;
|
|
}
|
|
},
|
|
getParams: function() {
|
|
return {
|
|
action: 'mailpoet',
|
|
token: this.options.token,
|
|
endpoint: this.options.endpoint,
|
|
method: this.options.action,
|
|
data: this.options.data || {}
|
|
}
|
|
},
|
|
request: function(method, options) {
|
|
// set options
|
|
this.init(options);
|
|
|
|
// set request params
|
|
var params = this.getParams();
|
|
var deferred = jQuery.Deferred();
|
|
|
|
// remove null values from the data object
|
|
if (_.isObject(params.data)) {
|
|
params.data = _.pick(params.data, function(value) {
|
|
return (value !== null)
|
|
})
|
|
}
|
|
|
|
// ajax request
|
|
deferred = jQuery.post(
|
|
this.options.url,
|
|
params,
|
|
null,
|
|
'json'
|
|
).then(function(data) {
|
|
return data;
|
|
}, function(xhr) {
|
|
return xhr.responseJSON;
|
|
});
|
|
|
|
// clear options
|
|
this.options = {};
|
|
|
|
return deferred;
|
|
}
|
|
};
|
|
});
|