1

我知道我已经问过这个问题,但是我的代码做错了。我知道我需要使用 JSON,在浏览了几页之后我理解了这个理论,但不知何故不能让它在这里工作再次是我的代码(顺便说一句,我知道我的安全问题,我会像一旦我用 JSON 解决了​​我的技术问题):

$(document).on('pageinit',function(){
$("#login").click(function(){

username=$("#usr").val();
password=$("#psw").val();
$.ajax({
type: "POST",
url: "http://imes.**********.com/php/login_check.php",
data: "name="+username+"&pwd="+password,
success: function(html){
//in case of success
if(html=='true')
{
var usr = console.log(data.usr);
var psw = console.log(data.psw);
$.cookie('usr', usr);
$.cookie('psw', psw);
$("#login_message").html("Logged in, congratulation.");
$.mobile.changePage("http://imes.**********.com/userpanel.php");
}
//in case of error
else
{
$("#login_message").html("Wrong username or password");
}
},
beforeSend: function() { $.mobile.showPageLoadingMsg(); }, //Show spinner
complete: function() { $.mobile.hidePageLoadingMsg() }, //Hide spinner
});
return false;
});

还有我的 php:

<?php
session_start();
$username = $_POST['name'];
$password = $_POST['pwd'];
include('mysql_connection.php');
mysql_select_db("jzperson_imesUsers", $con);
$res1 = mysql_query("SELECT * FROM temp_login WHERE username='$username' AND password='$password'");
$num_row = mysql_num_rows($res1);
$res2 = mysql_fetch_array($res1);
if( $num_row == 1 ) {
$arr = array('usr' => $username, 'psw' => $password);
echo json_encode($arr);
echo 'true';
}
else{
echo 'false';
}
?>
4

3 回答 3

1

这就是我要做的(PHP)。首先设置您的响应数组,默认为 success FALSE

$arr = array('success' => FALSE);

如果成功,则您的条件将覆盖:

if( $num_row == 1 ) 
{
    $arr = array('success' => TRUE, 'usr' => $username, 'psw' => $password);
}

最后在脚本结束时将结果作为 JSON 编码数据返回。

echo json_encode($arr);
exit();

我还会对您的 jQuery 进行以下更改:

$.ajax({
    type: "POST",
    url: "http://imes.**********.com/php/login_check.php",
    data: "name="+username+"&pwd="+password,
    dataType: 'json', // let's it know the response will be JSON formatted
    success: function(json){
        if (json.success === true){
            // do whatever you want here
        }
});

不过有一点建议:您永远不应该将用户密码传递给前端。
永远都不需要它。

于 2013-01-23T19:26:34.053 回答
1

您的输出不是有效的 json,在 json 之后回显 true 或 false 将导致它无效。您必须将成功消息插入到 json 数据中。

if( $num_row == 1 ) {
    $arr = array('usr' => $username, 'psw' => $password);
    echo json_encode(array('data'=>$arr, 'success'=>true);
    //echo 'true';
}
else{
    echo json_encode(array('success'=>false);
} 

然后检查您的 ajax 成功回调

success: function(json){
//in case of success
if(json.success){
    var usr = json.data.usr;
    ...
}
else{
    ...
}

此外,您应该将参数作为对象传递给数据,以便正确编码。

data: {"name":username,"pwd":password},
于 2013-01-23T19:27:13.143 回答
0

如果有帮助,JSON 基本上是 JS 中变量定义的右侧:

var myvar = ....;
            ^^^^---- basically JSON

既然你在做

echo json_encode($var);
echo 'true';

在您的 PHP 代码中,考虑它从客户端的外观:

var myvar = 'somestring'true;
                        ^^^^---syntax error

如果您在 JS 代码中输出 JSON 以供 AJAX 调用使用,那么 JSON 文本是服务器可以作为其响应输出的唯一内容。其他任何东西都会以某种方式简单地破坏 json 字符串,并使其无效。

于 2013-01-23T19:53:48.277 回答