-2

私は得る

Uncaught SyntaxError: Unexpected token < x.extend.parseJSON jQuery.js:4
$.ajax.success Login.js:15
c jQuery.js:4
p.fireWith jQuery.js:4
k jQuery.js:6
r

jQuery は新規ダウンロードであり、ログイン js のエラーはこの行にあります

var json = jQuery.parseJSON(data);

ここで編集するのは、ログイン php ページです。javascript が必要な場合は、教えてください。また、これは標準のフォームとページをセットアップするよりも効果的だと思いますか?

<?php

require("./../config.php");

if (!isset($_POST['req']))
{
    die("No request provided.");
}
else 
{ 
    if ($_POST['req'] == "login")
    {
        $json = array("success"=>false, "msg"=>"", "req"=>"login");

        if (!isset($_POST['user']) || empty($_POST['user']))
        {
            $json['success'] = false;
            $json['msg'] = "No user provided";
        }
        else
        { 
            if (!isset($_POST['pass']) || empty($_POST['pass']))
            {
                $json['success'] = false;
                $json['msg'] = "No password provided";
            }
            else
            { 
                $user = mysql_real_escape_string($_POST['user']);
                $password = mysql_real_escape_string($_POST['pass']);

                $password = hash("sha512", $password);

                $query = mysql_query("SELECT `id` FROM `users` WHERE `username` = '" . $user . "' AND `password` = '" . mysql_real_escape_string($password) . "' LIMIT 1");

                if (mysql_num_rows($query)) 
                {
                    $sessID = mysql_real_escape_string(session_id());
                    $hash = mysql_real_escape_string(hash("sha512", $sessID.$_SERVER['HTTP_USER_AGENT']));

                    $userData = mysql_fetch_assoc($query);
                    $expires = time() + (60 * 15);

                    mysql_query("INSERT INTO `active_users` (`user`, `session_id`, `hash`, `expires`) VALUES (" . (int) $userData['id'] . ", '" . $sessID . "', '" . $hash . "', " . $expires . ")");
                    $json['success'] = true;
                    $json['msg'] = "Logged in";
                }
                else
                {
                    $json['success'] = false;
                    $json['msg'] = "Username or password are incorrect.";
                }
            }
        }

        print(json_encode($json));
    }
}
?>
4

1 に答える 1

4

jQuery 1.9 以降では、$.parseJSONは を返すのではなく、JavaScript エラーをスローしますnull。したがって、json はそのエラーを表示するのに有効ではありません。

jQuery ドキュメントから:

「jQuery 1.9 より前では、$.parseJSON は、空の文字列、null、または未定義が渡された場合、それらが有効な JSON でなくても、エラーをスローする代わりに null を返しました。」

JS がエラーをスローするのを防ぐには、次の手順を実行します。

try {
    var json = $.parseJSON(data);
    //if code below here runs, means json is valid


} catch(e){
    //if code below here runs, means json is invalid

}

Ps .: JSON を投稿して、何が問題なのかを確認してください。(私のコードを使用する場合)console.log(data);の前に追加することで実行できます。try

于 2013-06-18T20:13:52.543 に答える