0

JSON形式でデータを返すPHP Webサービスに取り組んでいます。私は現在、jQuery/javascript ファイルを使用して Web サービスをテストしています。呼び出しを行ってデータを正しく受信しているようですが、サーバーからの戻り値に二重引用符が多すぎるようです。

PHP:

public static function getToken($username, $password)
        {
            $token = AuthenticationController::authenticate($username, $password);

            if ($token)
            {
                $user = AuthenticationController::getUserFromToken($token);

                if (UserController::userIsVerified($user->id))
                {
                    $t = array('token' => $token);

                    return json_encode($t);
                }

                return json_encode(array('error' => 'This account has not been verified. Check email and click the provided link to verify the account.'));
            }

            return json_encode(array('error' => 'Authentication failed.'));
        }

JS:

req.done(function(msg)
        {
            if (msg.error)
            {
                error = true;
                message = msg.error;
            }
            else if (msg.message)
            {
                message = msg.message;
            }
            else if (msg.token)
            {
                token = msg.token;
            }
            else 
            {
                error = true;
                message = "An unknown error has occured.";
            }
        });

1 つは、msgオブジェクトが JSON オブジェクトとして返されるのではなく、代わりに文字列として返されるため、これを行う必要がある$.parseJSON(msg)ことです。以下に示すように、token 変数は最終的に "mylongtoken" (引用符を含む) と書き出されます。そして、firebug でその変数を見ると、""mylongtoken"" のようになっています。これは単なるデフォルトの動作であり、引用符を削除する必要がありますか?

4

1 に答える 1

1

まず、jquery が応答を json として解析できるようにするには、適切なコンテンツ タイプを返す必要があります。application/json適切なようです。

X-Content-Type-Options: nosniffセキュリティを強化するために、HTML 解析と XSS を有効にする可能性のあるコンテンツ スニッフィングを試行するために、だまされて JSON を通常のページとして読み取るブラウザを防止するために追加できます。

第 2 に、2 組の引用符を取得した場合、コード化したものがそれらを追加します。json_encode() は以下を行いません:

echo json_encode(array('token' => 'tokenstring');出力されます{"token":"tokenstring"}- 周囲の引用符はありません。文字列内の引用符は、バックスラッシュを使用してエスケープされます。

于 2012-10-08T19:24:26.350 に答える