为什么JavaScript不会因异步HTTP(AJAX)请求而抛出异常?

时间:2017-06-02 16:13:42

标签: javascript json ajax exception

我编写了以下JavaScript函数,它非常简单,它需要一个ID,然后将其发送到PHP页面,该页面回显了一些JSON。它通过GET将ID传递到PHP页面。

例如,如果我要发出以下GET请求:/processing/getAccountInfo.php?id=5,它将返回此(从数据库获取):{"username":"carefulnow","profileImg":null}。这是正确的,所以我知道我的PHP工作正常。

我最初调用AJAX的JavaScript代码现在需要处理它,将其回显并检查错误。如果PHP函数遇到任何错误,则返回的JSON将包含“errorMsg”,其中包含遇到的PHP异常的名称,包括特定消息(Exception::getMessage())。示例错误结果为{"errorMsg":"PDOException: some error..."}

function getAccountInfo(id) {

    var loading = document.getElementById("loading");
    var inner = document.getElementById("accInfInner");

    var name = document.getElementById("accInfName");
    var img = document.getElementById("accInfImg");

    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange = function() {
        if (this.readyState === 4 && this.status === 200) {

            try {
                var response = JSON.parse(this.responseText);

                if (response.errorMsg === undefined) {

                    if (response.username === undefined || response.profileImg === undefined) {
                        throw new Error("Could not get the username and profile image. Try logging in then back out.");
                    }

                    name.innerHTML = response.username;

                    // The profile image is not required.

                    if (response.profileImg !== null) {
                        img.src = response.profileImg;
                    } else {
                        img.src = "/assets/img/defaultuser.jpg";
                    }

                    loading.style.display = "none";
                    inner.style.display = "block";

                } else {
                    throw new Error(response.errorMsg);
                }
            } catch (exception) {
                inner.innerHTML = "Error. Hover for details.";
                inner.title = exception.message;
            }
        }
    };

    xmlhttp.open("GET", "/processing/getAccountInfo.php?id=" + id, true);
    xmlhttp.send();

}

然而,问题是throw语句不起作用。如果从PHP抛出错误,则没有任何反应(控制台中没有错误)!我的IDE(PHPStorm 2017.1)给出了以下错误:“在当地捕获的'异常'”,在搜索批次之后,我找不到其他人有同样的问题。与GET请求有关的是异步,还是我看不到更简单的东西?

0 个答案:

没有答案