You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

登录功能本地及AWS服务器失效,报JSON解析语法错误

解决登录功能JSON解析错误的问题

哇,这种没改代码却突然崩了的情况真的让人头大!我帮你拆解下这个Uncaught SyntaxError: Unexpected token { in JSON at position 96错误的来龙去脉,以及对应的解决办法:

核心问题定位

这个错误说明前端拿到的resultDataString根本不是合法的JSON格式——位置96的{破坏了JSON的结构。结合你提到的「AWS测试后本地登录失效」的背景,最大的可能是你的本地服务器返回的不是预期的登录结果JSON,而是混了HTML错误页面、堆栈日志这类非JSON内容。

比如:本地Servlet处理登录请求时抛出了异常(比如数据库连接失败),服务器自动返回了500错误的HTML页面,而前端还在硬把这个HTML当成JSON解析,自然就炸了。

分步排查与解决

1. 先抓出服务器到底返回了什么

打开浏览器开发者工具(按F12),切换到「Network」标签:

  • 点击登录按钮触发请求
  • 在请求列表里找到login这个请求,查看它的「Response」内容
  • 你大概率会看到不是纯JSON,可能是Servlet的错误堆栈、数据库连接失败的提示,或者Tomcat的默认错误页面——这些内容里的{和JSON的语法冲突,直接导致了解析失败

2. 排查本地服务器的异常状态

虽然你没改代码,但AWS测试后可能触发了一些隐性的状态变化:

  • 检查本地LoginServlet的数据库连接配置:会不会测试AWS时临时修改了数据库地址/账号,之后没改回来?
  • 重启本地Java服务器(比如Tomcat):有时候服务器进程会因为资源占用、连接池耗尽等原因进入异常状态,重启能解决很多玄学问题
  • 查看服务器日志:比如Tomcat的logs/localhost.log,看看处理登录请求时有没有抛出异常(比如SQL错误、数据库连接超时)

3. 给前端加容错逻辑(避免页面直接崩溃)

现在的代码直接把返回内容当JSON解析,容错性太差。可以先加个try-catch,既避免页面崩掉,还能打印出错误详情方便排查:

/** 
 * Handle the data returned by LoginServlet 
 * @param resultDataString jsonObject 
 */ 
function handleLoginResult(resultDataString) { 
  try {
    resultDataJson = JSON.parse(resultDataString); 
    // If login success, redirect to index.html page 
    if (resultDataJson["status"] === "success") { 
      window.location.replace("index.html"); 
    } 
    // If login fail, display error message on <div> with id "login_error_message" 
    else { 
      jQuery("#login_error_message").text(resultDataJson["message"]); 
    }
  } catch (e) {
    // 打印错误详情到控制台,方便排查
    console.error("解析服务器响应失败:", e);
    console.error("服务器返回的原始内容:", resultDataString);
    jQuery("#login_error_message").text("服务器返回异常,请检查服务器状态");
  }
} 

/** 
 * Submit the form content with POST method 
 * @param formSubmitEvent 
 */ 
function submitLoginForm(formSubmitEvent) { 
  formSubmitEvent.preventDefault(); 
  jQuery.post( 
    "login", 
    jQuery("#login_form").serialize(), 
    (resultDataString) => handleLoginResult(resultDataString)); 
} 

// Bind the submit action of the form to a handler function 
jQuery("#login_form").submit((event) => submitLoginForm(event)); 

4. 清除浏览器缓存

如果AWS测试用了不同的域名,浏览器可能缓存了跨域的异常响应。试试用隐私窗口打开本地页面,或者按Ctrl+Shift+R强制刷新页面,清除缓存后再测试登录。

内容的提问来源于stack exchange,提问作者user6313136

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:27:43