|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
OpenCart 后台 JSON.parse() 报错, 是怎么回事?opencart 3.0.3.9,后台,出现弹窗:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
parsererror
<!DOCTYPE html>
<html dir="ltr" lang="en">
<head>
<meta charset="UTF-8" />
<title>Administration</title>
<base href="https://lomasfino.com/admin/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
<script type="text/javascript" src="view/javascript/jquery/jquery-3.7.0.min.js"></script>
<script type="text/javascript" src="view/javascript/bootstrap/js/bootstrap.min.js"></script>
<link href="view/stylesheet/bootstrap.css" type="text/css" rel="stylesheet" />
<link href="view/javascript/font-awesome/css/font-awesome.min.css" type="text/css" rel="stylesheet" />
<script src="view/javascript/jquery/datetimepicker/moment/moment.min.js" type="text/javascript"></script>
<script src="view/javascript/jquery/datetimepicker/moment/moment-with-locales.min.js" type="text/javascript"></script>
<script src="view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
<link href="view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.css" type="text/css" rel="stylesheet" media="screen" />
<link type="text/css" href="view/stylesheet/stylesheet.css" rel="stylesheet" media="screen" />
<link href="https://lomasfino.com/image/catalog/cart.png" rel="icon" />
<script src="view/javascript/common.js" type="text/javascript"></script>
</head>
<body>
<div id="container">
<header id="header" class="navbar navbar-static-top">
<div class="container-fluid">
<div id="header-logo" class="navbar-header"><a href="https://lomasfino.com/admin/index.php?route=common/login" class="navbar-brand"><img src="view/image/logo.png" alt="OpenCart" title="OpenCart" /></a></div>
</div>
</header>
<div id="content">
<div class="container-fluid"><br/>
<br/>
<div class="row">
<div class="col-sm-offset-4 col-sm-4">
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title"><i class="fa fa-lock"></i> Please enter your login details.</h1>
</div>
<div class="panel-body">
<form action="https://lomasfino.com/admin/index.php?route=common/login" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="input-username">Username</label>
<div class="input-group"><span class="input-group-addon"><i class="fa fa-user"></i></span>
<input type="text" name="username" value="" placeholder="Username" id="input-username" class="form-control" />
</div>
</div>
<div class="form-group">
<label for="input-password">Password</label>
<div class="input-group"><span class="input-group-addon"><i class="fa fa-lock"></i></span>
<input type="password" name="password" value="" placeholder="Password" id="input-password" class="form-control" />
</div>
<span class="help-block"><a href="https://lomasfino.com/admin/index.php?route=common/forgotten">Forgotten Password</a></span>
</div>
<div class="text-right">
<button type="submit" class="btn btn-primary"><i class="fa fa-key"></i> Login</button>
</div>
<input type="hidden" name="redirect" value="https://lomasfino.com/admin/index.php?route=extension/dashboard/chart/chart&range=month" />
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<footer id="footer"><a href="http://www.opencart.com">OpenCart</a> © 2009-2025 All Rights Reserved.<br/></footer></div>
</body></html>
这个错误的原因很明确:OpenCart 后台的某个 Ajax 请求预期返回 JSON 数据,但实际上服务器返回的是 整个登录页面的 HTML,导致 JSON.parse() 报错。
主要原因- 你已经退出后台登录状态,后台某些页面或模块(尤其是 dashboard 小插件)在加载时调用 Ajax 接口,由于未登录,被重定向到了 login 页面,返回了 HTML。
- JS 脚本尝试 JSON.parse() 本该是 API 返回的 JSON,但解析 HTML 自然报错。
核实方法- F12 → Network → XHR,刷新后台页面:
- 看看哪个接口返回了 login 页面(状态码 200,但是 HTML 页面内容)。
- 检查登录状态:
100%可以确定:这是一个“正常的 OpenCart 行为”,不是系统崩溃或代码报错,只是未登录状态下的 Ajax 请求触发的提示。
你该怎么做:- 直接重新登录后台,99%这条报错就不再出现。
- 如果后台登录后还持续出现:
- 大概率是某个后台插件的 Ajax 地址或权限配置问题,可以继续排查 Network 请求。
要不要我帮你做个 排查完整流程?
你的怀疑是合理的,但 php.ini 修改不会直接导致这个报错,但可以间接引起登录超时后报错。
✅ 原因梳理:
- 修改 php.ini 的 session.gc_maxlifetime,比如设置成 86400 秒(24小时),确实能延长 PHP session 存活时间。
- 但是 OpenCart 登录状态不仅依赖 PHP session,还依赖 Cookie(OCSESSID)和 token/user_token 参数。
- 如果:
- 浏览器 Cookie 提前丢失(浏览器关闭或清理了 Cookie);
- OpenCart 后台页面未刷新过长时间;
- session.save_path 设置错误或 PHP session 被服务器回收(比如服务器重启、cron清理);
就算 php.ini 设置很长,登录状态仍然会丢失,Ajax 就会收到登录页 HTML,导致你看到这个错误。
📌 怎么验证是不是这个原因:
- 登录后台 → F12 → Console 清空日志,Network 清空记录;
- 不操作后台放置 20分钟或更久;
- 随便点击后台菜单或者刷新 dashboard,看是不是又出现同样 SyntaxError JSON.parse;
- 同时观察 Cookies 里的 OCSESSID 是否还存在。
💡 最常见实践:
- php.ini 里 session 生存期可以延长没问题;
- 关键是:
- OpenCart Admin 设置的 session.cookie_lifetime 通常是 0(浏览器关闭即丢失),可以用 JS keep-alive 刷新解决。
- 定期刷新后台页面(比如后台 idle 超过几小时自动刷新)可以有效避免。
你要我帮你写段自动后台 keep-alive 的 js 吗?或者检查下你的 php.ini 和 OpenCart session 设置?
|
|