You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.3 KiB
JavaScript

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/**
* Get the API endpoint URL for an action
* @param {String} action
* @return {String}
*/
function getActionUrl(action) {
return SETTINGS["server"] + "/" + action;
}
/**
* Call an API function on the server.
* @param {string} action
* @param {array} data key: value array of arguments for the server.
* @param {function} success Called with the JSON response object.
* @param {function} failure Called with an error message string.
* @return {undefined}
*/
function callAPI(action, data, success, failure) {
return $.ajax({
type: 'POST',
dataType: 'json',
url: getActionUrl(action),
data: data,
timeout: 5000,
success: function (data, textStatus) {
if (data.status === "OK") {
success(data);
return;
}
if (typeof failure != 'function') {
return;
}
if (data.status === "ERROR") {
failure(data.msg);
} else {
failure("The server sent an invalid response.");
}
},
error: function (xhr, textStatus, errorThrown) {
if (typeof failure != 'function') {
return;
}
switch (textStatus) {
case "timeout":
failure("Couldn't connect to the server (timeout).");
break;
case "error":
failure("Couldn't connect to the server (error).");
break;
case "parseerror":
failure("The server sent a malformed response.");
break;
default:
failure("Couldn't connect to the server.");
}
}
});
}
/**
* Call an API function on the server. Makes fewer assumptions about what
* constitutes a success response.
* @param {string} action
* @param {array} data key: value array of arguments for the server.
* @param {function} success Called with the JSON response object.
* @param {function} failure Called with an error message string.
* @return {undefined}
*/
function callAPIRawResponse(action, data, success, failure) {
return $.ajax({
type: 'POST',
url: getActionUrl(action),
data: data,
timeout: 5000,
success: function (data, textStatus) {
success(data);
},
error: function (xhr, textStatus, errorThrown) {
if (typeof failure != 'function') {
return;
}
switch (textStatus) {
case "timeout":
failure("Couldn't connect to the server (timeout).");
break;
case "error":
failure("Couldn't connect to the server (error).");
break;
case "parseerror":
failure("The server sent a malformed response.");
break;
default:
failure("Couldn't connect to the server.");
}
}
});
}