简体   繁体   English

JSON意外令牌

[英]JSON Unexpected token s

JSON.parse() seems not to work with my code, I'm not sure what's causing it. JSON.parse()似乎不适用于我的代码,我不确定是什么原因造成的。

JS Code: JS代码:

var obj = JSON.parse(this.responseText);
console.log(obj.status + " " + obj.type);
if (obj.status == "success") {
   document.cookie = "accounttype=" + obj.type;
   document.cookie = "name=" + obj.name;
   var accounttype = getCookie(accounttype);
   if (accounttype == "Seller") {
      window.location.href = "../html/sell.html";
   }
}

PHP Code: PHP代码:

$count = mysqli_num_rows($result);
    if($count == 1){
        echo '{"status": "success", "type":"$account", "name":"$name"}';
    }else{
        echo '{"status": "failed"}';
    }

Hope you guys can help me, thanks! 希望你们能帮助我,谢谢!

EDIT UPDATED CODE 编辑更新的代码

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
        var str = JSON.stringify(this.responseText);
        var obj = JSON.parse(str);
        console.log(obj.status + " " + obj.type);
        if (obj.status == "success") {
            document.cookie = "accounttype=" + obj.type;
            document.cookie = "name=" + obj.name;
            var accounttype = getCookie(accounttype);
            if (accounttype == "Seller") {
                window.location.href = "../html/sell.html";
            }
        } else {
            sweetAlert("Oops...", "Invalid username or password!", "error");
            document.getElementById("password").value = "";
        }
    }
}
xmlhttp.open("POST", "../php/login.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("username=" + username + "&" + "password=" + password);

And here's the updated PHP code: 这是更新的PHP代码:

<?php
    include("checkdbconnection.php");

        session_start();


    $username = mysqli_escape_string($conn, $_POST['username']);
    $password = mysqli_escape_string($conn, $_POST['password']);
    $password = md5($password);

    $getLogin = "SELECT * FROM user WHERE username = '$username' and password = '$password'";
    $result = mysqli_query($conn, $getLogin);

    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    $name = $row["firstname"];
    $account = $row["account_type"];

    if(!$result){
       echo "Query Error: ". mysqli_error($conn);
       die();
    }

    $jsonsuccess = ["status": "success", "type": $account, "name": $name];
    $jsonfail = ["status": "failed"];
    $jsonsuccstring = json_encode($jsonsuccess);
    $jsonfailstring = json_encode($jsonfail)
    $count = mysqli_num_rows($result);
    if($count == 1){
        echo $jsonsuccstring;
    }else{
        echo $jsonfailstring;
    }
?>

Console returns undefined for both JSON returned values. 控制台为两个JSON返回值返回undefined。

Use json_encode() 使用json_encode()

Your server side response should be 您的服务器端响应应为

 $json = ["status": "success", "type": $account, "name": $name];

 $jsonstring = json_encode($json);
 echo $jsonstring;
 die();

Your JS code should be like 您的JS代码应该像

$.ajax({  
    type: "GET",
    url: "URL.php",
    data: data,
    success: function(data){
        // Here is the tip
        var data = $.parseJSON(data);
        //Here is success 
        alert(data.status);
    }
});

EDIT 编辑

You should verify your json string. 您应该验证您的json字符串。 If it is ok try this: 如果可以,请尝试以下操作:

var jsonStr="your json string";
var json=JSON.stringify(jsonStr);
json=JSON.parse(json)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM