From 54aae1d130e6b4c7408f6a75440d1bd64d2f5cfc Mon Sep 17 00:00:00 2001 From: hylom Date: Fri, 5 Apr 2019 19:58:51 +0900 Subject: [PATCH] js: fix newslash.js to support IE/Edge --- src/newslash_web/public/js/newslash.js | 48 +++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/src/newslash_web/public/js/newslash.js b/src/newslash_web/public/js/newslash.js index dd479d5e..ec769316 100644 --- a/src/newslash_web/public/js/newslash.js +++ b/src/newslash_web/public/js/newslash.js @@ -50,13 +50,27 @@ function _initNewslash() { req.responseType = "json"; req.onreadystatechange = function onReadyStateChange () { if (req.readyState == XMLHttpRequest.DONE) { + // hack for IE/Edge support (req.responseType == "json" is not supported) + var respType = req.responseType; + var resp = req.response; + + if (respType === "") { + try { + resp = JSON.parse(req.response); + respType = "json"; + } catch(e) { + console.log("Newslash.post: cannot parse JSON"); + } + } + // request done - if (req.status == 200 && req.responseType == "json") { - return resolve(req.response); + if (req.status == 200 && respType == "json") { + return resolve(resp); } + // request failed - if (req.responseType == "json") { - return reject(req.response); + if (respType == "json") { + return reject(resp); } return reject(req); } @@ -82,17 +96,31 @@ function _initNewslash() { req.responseType = "json"; req.onreadystatechange = () => { if (req.readyState == XMLHttpRequest.DONE) { + // hack for IE/Edge support (req.responseType == "json" is not supported) + var respType = req.responseType; + var resp = req.response; + + if (respType === "") { + try { + resp = JSON.parse(req.response); + respType = "json"; + } catch(e) { + console.log("Newslash.post: cannot parse JSON"); + } + } + // request done - if (req.status == 200 && req.responseType == "json") { - return resolve(req.response); + if (req.status == 200 && respType == "json") { + return resolve(resp); } + // request failed - if (req.responseType == "json") { - if (req.response && req.response.reason == "invalid_csrf_token") { + if (respType == "json") { + if (resp && resp.reason == "invalid_csrf_token") { if (retryCount >= 3) { return reject({error: 1, reason: "exceeded retry count"}); } - var newToken = req.response.csrf_token; + var newToken = resp.csrf_token; if (newToken) { data.csrf_token = newToken; // retry with new token @@ -100,7 +128,7 @@ function _initNewslash() { return 1; } } - return reject(req.response); + return reject(resp); } return reject(req); } -- 2.11.0