0

$.ajax を使用して、php スクリプトから JSON 応答を取得しています。$.ajax 成功関数からデータ変数をログに記録すると、適切にフォーマットされた JSON オブジェクトが出力されますが、データ変数のプロパティにアクセスしようとすると、未定義になります。送り返されているphpは次のとおりです。

echo json_encode(array("status"=>true, "success"=>"Login Success", "message"=>"You have been logged in successfully."));

そして、ここに私のajax呼び出しがあります:

$.ajax({
        type: "POST",
        data: {
            login: true,
            username: $('#login-username').val(),
            password: $('#login-password').val()
        },
        async: false,
        url: "./php/client-login.php",
        success: function (data) {
            console.log(data.status);
            if (data.status) {
                console.log(data.success);
                displayModal(data.success, data.message, "./js/login-modal-code.js");
            } else if (!data.status) {

                displayModal(data.error, data.message, "./js/login-modal-code.js");
            }
        },
        error: function (jqXHR, status, responseText) {
            console.log(status);
        }
});

dataType: "json"オプションを $.ajax 呼び出しに追加すると、解析エラーが発生し、データ変数$.parseJSON(data);のデータにアクセスしようとすると、予期しないトークン エラーが発生します。何が間違っているのかよくわかりません。以前にこのセットアップを使用したことがあり、以前は常に機能していましたが、何らかの理由で現在は機能していません。誰かが私が間違っているところを見ますか?

編集: ここで言及するのを忘れていたのは、php スクリプトからの応答です:

{"status":true,"success":"Login Success","message":"You have been logged in successfully."}

編集 2: これが私のコンソールの画面です。上部の .length 呼び出しは、ログに記録された json でconsole.log(data)あり、下部の呼び出しは、php スクリプトからの応答に対する chrome dev tools ネットワーク タブの応答からのものです。それらは完全に並んでいますが、2 番目は 93 の長さを示しています。これを修正するにはどうすればよいですか?コンソール イメージ

4

2 に答える 2

0

jQuery Docsを読んでいて、「dataType: jsonp」が同期要求で機能しないことがわかりましたasync: false。オンにすると、問題が解決する場合があります。

また、ドキュメントを見てください。

幸運を!

于 2013-06-28T00:40:52.447 に答える
0

そこで、この問題の回避策を見つけました。最初にデータに対して JSON.stringify を実行し、続いて JSON.parse を実行し、最後に $.parseJSON() を実行して、使用する JavaScript オブジェクトを取得しました。PHPスクリプトを離れて$.ajax呼び出しに到達するまでの間に2つの非表示の文字が追加される理由がわからないので、誰かが理由を知っている場合は教えてください

于 2013-06-28T19:22:05.573 に答える