我使用的是JSON。解析有时包含404响应的响应。在返回404的情况下,是否有办法捕获异常,然后执行一些其他代码?

data = JSON.parse(response, function (key, value) {
    var type;
    if (value && typeof value === 'object') {
        type = value.type;
        if (typeof type === 'string' && typeof window[type] === 'function') {
            return new(window[type])(value);
        }
    }
    return value;
});

当前回答

我们可以检查错误& 404 statusCode,并使用try {} catch (err){}。

你可以试试这个:

const req = new XMLHttpRequest(); req.onreadystatechange = function() { if (req.status == 404) { console.log("404"); return false; } if (!(req.readyState == 4 && req.status == 200)) return false; const json = (function(raw) { try { return JSON.parse(raw); } catch (err) { return false; } })(req.responseText); if (!json) return false; document.body.innerHTML = "Your city : " + json.city + "<br>Your isp : " + json.org; }; req.open("GET", "https://ipapi.co/json/", true); req.send();

阅读更多:

为XHR捕获404错误

其他回答

我建议你使用这个作为ES6的最佳实践。使用Error对象

尝试{ myResponse = JSON.parse(response); } catch (e) { 抛出新的错误('错误已发生:',e); }

以上回答也有帮助,

我们可以检查错误& 404 statusCode,并使用try {} catch (err){}。

你可以试试这个:

const req = new XMLHttpRequest(); req.onreadystatechange = function() { if (req.status == 404) { console.log("404"); return false; } if (!(req.readyState == 4 && req.status == 200)) return false; const json = (function(raw) { try { return JSON.parse(raw); } catch (err) { return false; } })(req.responseText); if (!json) return false; document.body.innerHTML = "Your city : " + json.city + "<br>Your isp : " + json.org; }; req.open("GET", "https://ipapi.co/json/", true); req.send();

阅读更多:

为XHR捕获404错误

我把一些东西放入iframe,然后用json解析读回iframe的内容…有时候它不是json字符串

试试这个:

if(response) {
    try {
        a = JSON.parse(response);
    } catch(e) {
        alert(e); // error in the above string (in this case, yes)!
    }
}

你可以试试这个:

Promise.resolve(JSON.parse(response)).then(json => {
    response = json ;
}).catch(err => {
    response = response
});

我对Javascript还是个新手。但这是我所理解的: JSON.parse()在提供无效JSON作为其第一个参数时返回SyntaxError异常。所以。最好像下面这样捕获异常:

try {
    let sData = `
        {
            "id": "1",
            "name": "UbuntuGod",
        }
    `;
    console.log(JSON.parse(sData));
} catch (objError) {
    if (objError instanceof SyntaxError) {
        console.error(objError.name);
    } else {
        console.error(objError.message);
    }
}

我把“first parameter”加粗的原因是JSON.parse()接受一个恢复函数作为它的第二个参数。