为何我的jQuery登录代码未正常跳转?仅显示成功消息
问题排查与修复方案
咱们来一步步拆解你遇到的问题,你的代码里有两个关键问题导致跳转逻辑没触发:
1. localStorage存值的逻辑bug(虽不直接影响跳转,但需修正)
你这段代码里:
window.localStorage.setItem("username","luser");
这里的"luser"是一个字符串字面量,不是你之前定义的变量luser。也就是说你现在存到localStorage里的是字符串"luser",而不是用户输入的真实用户名。要改成不带引号的变量名:
window.localStorage.setItem("username", luser);
2. API返回内容的空白字符导致判断失败(这是跳转失效的核心原因)
你的判断条件是if(data == "successok"),但实际情况是,PHP接口返回的内容很可能带有隐藏的空白字符(比如换行符、空格,甚至是PHP脚本中?>标签之后的多余换行)。这时候data的值其实是类似"successok\n"或者" successok"这样的内容,和纯字符串"successok"的严格相等判断不成立,所以代码就走到了else分支,把返回内容显示在#result里,而没有执行跳转。
修复方案:对返回的data做去空白处理
使用$.trim()方法去除返回内容前后的所有空白字符,再进行判断:
jQuery(document).ready(function($) { $("#login").click(function(e) { $("#result").hide(); e.preventDefault(); var luser = $("#username").val(); var lpass = $("#password").val(); $.post("https://example.com/app/login-api.php", {luser:luser, lpass:lpass}, function(data) { $("#result").show(); // 去除返回内容的前后空白字符 var trimmedData = $.trim(data); if(trimmedData == "successok") { // 修正localStorage的变量引用 window.localStorage.setItem("username", luser); window.location.href = "index2.html"; } else { $("#result").html(trimmedData); } }); return false; }); });
另外,也建议你检查一下你的PHP登录接口,确保在返回successok的时候,没有输出任何多余的内容(比如echo之前的空格、注释,或者?>之后的换行),这样能从根源避免这类问题。
内容的提问来源于stack exchange,提问作者Tuzz Samuel
相关产品推荐
相关产品推荐

