json_encode布尔返回错误的值

Rap*_*981 3 php jquery json login

我正在写一个jquery登录.如果php登录脚本(checklogin.php)回显"true",那么我的jquery页面应该发出警报.当我运行login.php(不使用jquery)时,它将请求发送到checklogin.php,它回显"true"但是如果我使用我的jquery登录脚本将登录信息发送到checklogin.php,我跟踪的警报后面说"假".

$('#login').click(function(e){
      $.getJSON("http://www.hedonsoft.com/game/login.php",{username: $("#username").val(), password: $("#password").val()},function(data){
         if(data==true){
            alert(data.boolean);
            //$('#logindiv').slideUp();
            //$('#gamediv').show(); 
            //$('#registerdiv').hide();
            //$('#gameheader').html(data['username']);
         }else{
            alert("false");
         }
      });
});

<?php
header('Access-Control-Allow-Origin: *');
$host="localhost"; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name="hedonsof_conflict"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
$json = array('boolean' => 'true', 'jsonUser' => $myusername);
echo "true";
}
else {
echo "Wrong Username or Password";
}
?>
Run Code Online (Sandbox Code Playgroud)

长话短说,当我尝试从常规的php页面登录时,我跟踪的值是真的,当我尝试从jquery页面登录时,我跟踪的值是false;

编辑:

<?php
...
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
$json = array('boolean' => true, 'jsonUser' => $myusername);
echo true;
}
else {
echo "Wrong Username or Password";
}
?>
Run Code Online (Sandbox Code Playgroud)

而我的jQuery ......

$('#login').click(function(e){
      $.getJSON("http://www.hedonsoft.com/game/login.php",{username: $("#username").val(), password: $("#password").val()},function(data){
         if(data){
            alert("true");
            //$('#logindiv').slideUp();
            //$('#gamediv').show(); 
            //$('#registerdiv').hide();
            //$('#gameheader').html(data['username']);
         }else{
            alert(data); // shows null
         }
      });
});
Run Code Online (Sandbox Code Playgroud)

使用json_encode,返回布尔值null

$('#login').click(function(e){
       $.getJSON("http://www.hedonsoft.com/game/login.php",{username: $("#username").val(), password: $("#password").val()},function(data){
          if(data.boolean == "true"){
             alert("true");
             //$('#logindiv').slideUp();
             //$('#gamediv').show(); 
             //$('#registerdiv').hide();
             //$('#gameheader').html(data['username']);
          }else{            alert(data);
          }
       }); });
Run Code Online (Sandbox Code Playgroud)
<?php
...
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
$json = array('boolean' => true, 'jsonUser' => $myusername);
echo json_encode($json);
}
...
?>
Run Code Online (Sandbox Code Playgroud)

Ry-*_*Ry- 9

使用true,而不是'true'.'true'是一个字符串,你想要一个布尔值:

$json = array('boolean' => true, 'jsonUser' => $myusername);
Run Code Online (Sandbox Code Playgroud)

另外,永远不要== true.

if(data==true) {
Run Code Online (Sandbox Code Playgroud)

好的,现在的问题是:

$json = array('boolean' => true, 'jsonUser' => $myusername);
echo true;
Run Code Online (Sandbox Code Playgroud)

不要echo true,echo json_encode($json).

  • @Mahn:它只会导致代码错误.`if(data == true)`*通常*等同于`if(data)`.如果它是等价的,`== true`是多余的,应该被取出.如果*不等同,那么您的代码就会出现严重问题 - 就像这里的情况一样.如果你真的需要检查一个'true`值而没有别的,最多使用`=== true`. (3认同)
  • @Mahn:嗯,JavaScript.`'true'!= true`但是`'true'`是真的. (3认同)