aboutsummaryrefslogtreecommitdiff
path: root/ext/bg/js/util.js
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2017-07-10 16:24:31 -0700
committerAlex Yatskov <alex@foosoft.net>2017-07-10 16:24:31 -0700
commitb0cdf59bd8dae8f44362b14bdf19b243514e31d3 (patch)
treebaff7b58c86d207bddc707fbfc68f2f5b83aa000 /ext/bg/js/util.js
parentefb5ed2af8c0bcf1c0dbfdbeef7c89dad2a106b9 (diff)
move anki to async
Diffstat (limited to 'ext/bg/js/util.js')
-rw-r--r--ext/bg/js/util.js25
1 files changed, 25 insertions, 0 deletions
diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js
index b8a60217..4f907923 100644
--- a/ext/bg/js/util.js
+++ b/ext/bg/js/util.js
@@ -428,6 +428,31 @@ function dictFieldFormat(field, definition, mode, options) {
return field;
}
+/*
+ * JSON
+ */
+
+function jsonRequest(url, action, params) {
+ return new Promise((resolve, reject) => {
+ const xhr = new XMLHttpRequest();
+ xhr.overrideMimeType('application/json');
+ xhr.addEventListener('load', () => resolve(xhr.responseText));
+ xhr.addEventListener('error', () => reject('failed to execute network request'));
+ xhr.open(action, url);
+ if (params) {
+ xhr.send(JSON.stringify(params));
+ } else {
+ xhr.send();
+ }
+ }).then(responseText => {
+ try {
+ return JSON.parse(responseText);
+ }
+ catch (e) {
+ return Promise.reject('invalid JSON response');
+ }
+ });
+}
/*
* Helpers