Jquery Ajax调用会话变量抛出错误

时间:2016-05-31 01:51:03

标签: php jquery ajax

我试图通过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(),那么一切都会再次正常工作。希望我已经解释得很好。

1 个答案:

答案 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);