0

サーバー通信用に AJAX を使用し、サーバー側スクリプトとして PHP を使用して、非常に単純なログイン フォームを作成しようとしています。出発点として、ログインデータをJSON経由でサーバーに送信しようとしていましたが、すでに問題が発生しています。

問題は、AJAX で POST 要求を使用してデータを送信すると、サーバーが何も取得していないようで、データがまったく返されないことです。リクエストの HTML は次のとおりです。

<!DOCTYPE HTML>
<html>
<head>
<title> Login experiment </title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>

$(document).ready(function AjaxJSON() {
    $("form#loginForm").submit(function() {
        var username = $('#username').val();
        var password = $('#password').val();
        var jsonlogin = "{\"username\" : \"" + username + "\" , \"password\" : \"" + password + "\"}";
        var str = 'json=' + jsonlogin;
        $.ajax({
            type: 'POST',
            url: 'login.php',
            // URL of my PHP script
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: str,
            success: function(data) {
                alert("Data received!" + data);
            }
        });
        // ajax
        })
    })

</script>
</head>

<body>
<h1> LOGIN: </h1>
<form id="loginForm" name="loginForm" method="post" action="">
<input type="text" id="username" name="username"> USERNAME <br>
<input type="password" id="password" name="password"> PASSWORD <br>
<input type="submit" class="button positive">
</form>
</body>
</html>

この HTML コードは、JSON 文字列でコード化されたリクエスト フォーム (ユーザー名とパスワード) を PHP スクリプトに送信するだけです。スクリプトは次のようなものです。

<?php
$result = json_decode($_POST['json']);
echo $result->username;
echo " ";
echo $result->password;
?>

返信が表示されないのはなぜですか? よろしくお願いします:)

4

1 に答える 1

0

あなたの主な問題は、あなたが送信していると主張していることですapplication/json; charset=utf-8。これは、次の 2 つの理由で問題になります。

  1. PHP には、JSON でエンコードされた POST データを処理するためのメソッドが組み込まれていないため、$_POST入力されません。
  2. データは JSON ではありません。これは (不適切にエスケープされた)application/x-www-form-urlencodedデータです (データの一部として (不適切にエスケープされた) JSON の文字列を含みます)

JSON を送信する場合は、次のようにします。

  • JSON.stringfy文字列を一緒にマッシュすることによってではなく、それを使用して構築します
  • json=その前に固執しないでください
  • この質問に従って、POST 本文からデータを取得します

JSON に縛られていない場合は、フォーム データをエンコードするための標準的な方法を使用してください。

  • jsonlogin行を忘れる
  • デフォルトを上書きしないでくださいcontentType
  • データのオブジェクトを data 引数に渡します。data: { username: username, password: password }

次の問題は、あなたが言っていることですdataType: 'json'が、PHP が (無効な) HTML を返していることです (PHP は XSS 攻撃に対しても脆弱です)。

于 2013-08-31T21:43:51.603 に答える