在Javascript中使用try-catch-finally块来捕获JSON解析异常不起作用

问题描述 投票:1回答:1

我对网页脚本有些新意。我已经习惯了Java try-catch风格,而Javascript似乎也很相似。但是,当我尝试使用它时,我得到的结果并不完全相同。这是我的try-catch块:

try {
    loadAllInfo(<?php echo get_students_from_group();?>);
} catch (exception) {
    alert("Invalid data entered, please try again.");
    window.location.href = "studentDisplayFromService.php";
} finally {
    setHTMLStudentTable("all");
}

目标是,如果PHP请求失败(输入需要具有非常特定的语法,但在这种情况下,事先无法检查它),这会将用户带回输入网站,因为PHP请求发送返回无法解析为JSON的内容。当语法正确时,我的代码可以正常工作,但是当它不是,而不是捕获异常时,它会出现在控制台上:

SyntaxError:期望表达式,得到'<'(并且它显示问题所在的行,显然是这一行。)

我试过在try块中自己抛出异常,比如...

try {
    loadAllInfo(<?php echo get_students_from_group();?>);
    throw new exception("Error");
}

...在这种情况下捕获它,显示警报并将用户带回原始网站。

有什么可能导致这个问题或如何解决它的想法?我在这里找不到任何类似的问题:/

非常感谢你提前!

javascript php json try-catch
1个回答
1
投票

你需要像这样写:

JSON.parse('<?php echo json_encode(get_students_from_group());?>')

可在此处找到一些示例和详细说明:JSON.parse

如果你得到坏东西,你可能必须检查它是否在loadAllInfo()函数中有效。

在尝试使用它在Js中执行某些操作之前,最好在PHP函数get_students_from_group()中捕获该错误。正如您在评论中提到的那样,您将获得400状态代码作为响应。所以尽量抓住它。成功通话通常会返回200 http状态代码。

如果你需要使用file_get_contents(),你可以查看$http_response_header

更好地使用cUrl进行更多控制:

<?php
$ch = curl_init('http://...');
curl_exec($ch);
if (!curl_errno($ch)) {
    $info = curl_getinfo($ch); // ... Process information
}
curl_close($ch);
?>
© www.soinside.com 2019 - 2024. All rights reserved.