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

标签 javascript php json try-catch

我对网络脚本有些陌生。我习惯了 Java 的 try-catch 风格,而 Javascript 的似乎也差不多。但是,当我尝试使用它时,得到的结果并不完全相同。 这是我的 try-catch block :

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: expected expression, got '<' (And it shows the line where the problem is, obviously, this one.)

我曾尝试自己在 try block 中抛出异常,例如...

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

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

知道可能导致此问题的原因或解决方法吗?我在这里找不到任何类似的问题:/

非常感谢您!

最佳答案

你需要这样写:

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

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

如果您得到不好的结果,您可能需要检查它在您的 loadAllInfo() 函数中是否有效。

最好在 PHP 函数 get_students_from_group() 中捕获该错误,然后再尝试用它在 Js 中执行某些操作。 正如您在评论中提到的,您会收到 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);
?>

关于javascript - 在 Javascript 中使用 try-catch-finally block 捕获 JSON 解析异常不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47841571/

相关文章:

javascript - 访问键值中包含 ':' 的 JSON 值

ios - swift 3 中从数组到字典的 JSON 解析问题

javascript - 解析具有动态内容的网站

javascript - 使用类名按 ID 获取元素

javascript - 从 DropDownList 中选择选项时激活函数

php - 使用 IteratorAggregate 遍历成员数组

php - 使用 PHP cURL 向 Node.js 发送 Post 请求

javascript - 在 javascript 函数执行时加载屏幕

php - € 等 Html 实体在 CSV 转换中未转换为其符号

JSON 与表单 POST