JSON意外的令牌

时间:2016-10-09 06:38:12

标签: php jquery mysql json visual-studio-cordova

JSON.parse()似乎无法使用我的代码,我不确定是什么导致它。

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代码:

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

希望你们能帮助我,谢谢!

编辑更新后的代码

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

这是更新的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;
    }
?>

对于两个JSON返回值,控制台都返回undefined。

1 个答案:

答案 0 :(得分:0)

使用json_encode()

您的服务器端响应应为

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

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

您的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);
    }
});

修改

您应该验证您的json字符串。如果可以的话试试这个:

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