From: hylom Date: Fri, 5 Apr 2019 10:58:51 +0000 (+0900) Subject: js: fix newslash.js to support IE/Edge X-Git-Tag: v0.1.12~62 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=54aae1d130e6b4c7408f6a75440d1bd64d2f5cfc;p=newslash%2Fnewslash.git js: fix newslash.js to support IE/Edge --- 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); }