尝试catch javaScript不起作用

时间:2014-05-08 14:13:27

标签: javascript json

我有一个用于在JS中读取json文件的代码。我把代码包装在“try catch”块中。 我得到它的方式 - 如果由于某种原因找不到该文件,它应该进入“catch”块。 然而,如果“lang”未定义 - 它会抛出404: “GET - < -server-> - / settings / Lang_undefined.json 404(Not Found)” 没有进入“捕获”区块。

任何人都可以帮助我理解为什么会这样吗?

谢谢!

function loadDic() {
    try {
        $.getJSON(SERVER_URL + "settings/Lang_" + lang + ".json", function(data) {
            dic = data["dictionary"];
            setLanguage();
        });
    } catch (err) {
        return false;
    }
}

2 个答案:

答案 0 :(得分:2)

由于您似乎正在发出ajax请求(而不是jsonp请求),因此您可以使用错误回调来捕获错误。

function loadDic() {
    $.getJSON(SERVER_URL + "settings/Lang_" + lang + ".json", function(data) {
        dic = data["dictionary"];
        setLanguage();
    }).fail(setLanguageFail);
}

答案 1 :(得分:2)

Ajax是异步的。

  1. getJSON函数发送HTTP请求。
  2. 成功发送
  3. try成功
  4. 然后Ajax得到一个回复​​,说服务器有404错误
  5. 您还没有指定错误事件处理程序,因此没有任何反应
  6. 404错误不会导致抛出异常(这是一个HTTP错误,而不是JavaScript错误),并且当时无需等待捕获异常。

    如果您想在发生错误时执行某些操作,请指定一个处理错误的函数(您无法使用getJSON()执行此操作,而应使用ajax()代替)。请注意,您不能从包含getJSON调用的函数返回(基于此)。