简体   繁体   中英

JSON Unexpected token s

JSON.parse() seems not to work with my code, I'm not sure what's causing it.

JS Code:

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:

$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
    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.

Use 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

$.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. If it is ok try this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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