1

私は過去数日間、これを理解するのに苦労してきました。実際、私はこれらすべてに慣れていないので、常に何かを理解しようとしているようです。とにかく、私の質問に移ります。

PHPで配列をエンコードし、次のコードを使用してJSONを使用してJQueryで取得しようとしています。

'core / init.php'から含まれる関数:

function output_errors($errors) {
    echo json_encode($errors);
}

login.php:

<?php

include 'core/init.php';
logged_in_redirect();

if (empty($_POST) === false) {
$username = $_POST['username'];
$password = $_POST['password'];

if (empty($username) === true || empty($password) === true) {
    $errors[] = 'Please enter a username and password.';
} else if (user_exists($username) === false) {
    $errors[] = 'We can\'t find that username.  Have you registered?';
} else if (user_active($username) === false) {
    $errors[] = 'You haven\'t activated your account.';
} else {
    $login = login($username, $password);
    if ($login === false) {
        $errors[] = 'That username/password combination is incorrect.';
    } 
    else {
    //start session
        $_SESSION['user_id'] = $login;
    //redirect to home.
        header('Location: index.php');
        exit();
    }
}
} else {
header('Location: index.php');
}

include 'includes/overall/header.php';

if (empty($errors) === false) {

?>

<h2>We tried to log you in but...</h2>

<?php

output_errors($errors);

}

include 'includes/overall/footer.php';

?>

JQuery:

function logErrors(errors) {
    alert(errors);
};

$(document).ready(function() {
$.getJSON('login.php', function(errors){
    logErrors(errors);
    });
});

私はローカルで作業していて、テストファイルを動作させるためにそれを取得しました:

test.php:

<?php

function output_errors($errors) {
echo json_encode($errors);
}

output_errors($errors);

?>

私の調査のいくつかで、PHPのバージョンが問題になる可能性があることがわかりました。別のファイルで動作するようになっているので、それは私の問題ではないようです。

他の人が抱えていると思われるもう1つの一般的な問題は、$。getJSONが非同期であり、phpが配列を返す前に実行されている可能性があるという事実です。JQueryが適切に構成されているかどうか、またはその問題を回避できないかどうかはわかりません。

私が取得し続けるのはアラートではなく、エラーは次のようにエコーされます:["そのユーザー名が見つかりません。登録しましたか?"]。

JQueryでエンコードされた配列を取得し、関数logErrorsをトリガーするにはどうすればよいですか?

あなたたちが提供できるどんな助けにも前もって感謝します。投稿したコードが多すぎたり、足りなかったりしたらごめんなさい...新人の間違い。

アップデート

user_exists関数とuser_active関数は次のとおりです。

user_exists:

function user_exists($username) {
   $username = sanitize($username);
   $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` =    '$username'");
   return (mysql_result($query,0) == 1) ? true : false;     
}

user_active:

function user_active($username) {
   $username = sanitize($username);
   $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'AND `active` = 1");
   return (mysql_result($query,0) == 1) ? true : false;     
}

E

4

2 に答える 2

1

問題は、jsonオブジェクトを返す前にヘッダーを設定する必要がある可能性があります

function output_errors($errors) {
    header('Content-Type: application/json');
    echo json_encode($errors);
}
于 2013-03-10T03:59:39.453 に答える
0

最後に、それを理解しました。bozdozとDCoderは正しいことが判明しました。私はphpがページ全体をエコーすることに気づいていませんでした(新人の間違い)。json_encoded配列のみをエコーするという印象を受けました。

同様の問題が発生した場合は、目的の結果のみをエコーするファイルで作業していることを確認してください。

助けてくれてありがとう。

于 2013-04-05T15:32:57.817 に答える