javaScript上的try-catch不起作用

javaScript上的try-catch不起作用,javascript,json,Javascript,Json,我有一个在JS中读取json文件的代码。我将代码包装在“try-catch”块中。 我得到它的方式-如果由于某种原因找不到文件,它应该进入“catch”块。 然而,如果“lang”未定义,则会抛出404: “获取--/settings/Lang_undefined.json 404(未找到)” 从未进入“捕捉”块 有人能帮我理解为什么会这样吗 谢谢 function loadDic() { try { $.getJSON(SERVER_URL + "settings/La

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

有人能帮我理解为什么会这样吗

谢谢

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

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

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

  • getJSON
    函数发送一个HTTP请求
  • 它成功地发送了它
  • try
    成功
  • Ajax然后得到一个响应,说服务器有404错误
  • 您尚未指定错误事件处理程序,因此不会发生任何事情
  • 404错误不会导致抛出异常(这是一个HTTP错误,而不是JavaScript错误),而且当时没有任何东西等待捕获异常


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

    错误发生在
    loadDic
    完成后很长一段时间,在try/catch之外。它可能会按照预期工作,但是ajax是异步的,因此try/catch块在请求期间不会捕获网络错误或其他内容。http错误代码不会引发异常非常感谢!那么,我该怎么做才能捕捉到文件未发现异常呢?我的术语可能不太准确,但你知道我的意思。我的控制台上有一个404,非常感谢你。我试过了,我进入了“失败”部分。但我仍然可以在控制台中看到404。可以吗?它不会导致程序出现问题吗?是的,没关系,除了不请求一个不存在的文件之外,你无法避免它。