我试图通过Jquery Ajax调用来访问会话变量。但是,jquery响应不断抛出" Unexpected token<在JSON"错误。
这是我的Jquery代码 -
$( document ).ready(function() {
$.ajax({
url: "mysession.php",
dataType: "json",
success: function(response){
if(response.userid == ""){
alert(response.userid);
$("#WelcomeMsg").html("");
}else{
$("#WelcomeMsg").html("Welcome<br>"+response.username);
}
},
error : function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.status+", " + jqXHR.statusText+", "+textStatus+", "+errorThrown);
}
});
});
在PHP方面,我的代码包括以下内容 -
header("Content-Type: application/json");
// Start the session
session_start();
if(isset($_SESSION["user"]))
{
$userid = $_SESSION["user"];
$username = $_SESSION["name"];
$studentlog = array("userid" => $userid , "username" => $username, "Err"=>"");
echo json_encode($studentlog);
}else
{
$userid = "";
$username = "";
$studentlog = array("userid" => $userid , "username" => $username, "Err"=>"");
echo json_encode($studentlog);
}
有人可以建议我在做json编码时做错了吗
编辑:问题的更多背景知识。你可以理解我基本上是PHP的新手,并且是第一次使用会话变量。之前我曾用类似的代码编写了一个登录脚本(但没有使用会话变量),从数据库中获取用户名并执行用户验证。 Jquery Ajax调用完全相似,并且json_encode返回了数据。代码似乎一直很好。
但是现在我开始使用会话变量来获取用户登录状态后,似乎出现了问题。实际上,相同的登录脚本也会抛出错误。 (考虑到登录脚本的长度,我在这里提供了另一个PHP脚本)
还有一个观察,如果我只是在登录脚本中注释掉session_start(),那么一切都会再次正常工作。希望我已经解释得很好。
答案 0 :(得分:2)
根据您的新问题,您可以在某处输出数据。您是否使用<?
代替<?php
开始编写脚本,因为这可能是问题所在。我能想到的另一件事是你已经发送了标题(Read more about this issue/error)。
我需要您在脚本顶部打开错误报告,并将错误发布给我。
<?php
ini_set('display_errors', 1);
error_reporting(-1);
问题在于你的PHP。它可能会抛出错误或输出HTML而不是您要求的JSON。
我们需要查看该代码,但与此同时,您可以确保您的PHP返回正确的JSON 内容类型,方法是通过标题指定:
<?php
header("Content-Type: application/json");
查看您的PHP代码,会弹出两件事。
您想要的全局变量是$_SESSION
,而不是$_Session
。您将获得一个未定义的变量&#34;因此而发出通知。
您使用的是哪个版本的PHP?您正在使用PHP 5.4中引入的短数组语法 - [..]
。
您可以尝试将其更改为:
$studentlog = array("userid" => $userid , "username" => $username, "Err"=>"");
您还可以使用三元运算符缩短PHP:
<?php
session_start();
header("Content-Type: application/json");
$userid = ($_SESSION['user']) ? $_SESSION['user'] : "";
$username = ($_SESSION['name']) ? $_SESSION['name'] : "";
$studentlog = ["userid" => $userid , "username" => $username, "Err"=>""];
echo json_encode($studentlog);