リーリー
そうです、私の目的は、パスワードを送信する前にパスワードに対して md5 計算を実行し、パスワードを暗号化して送信することです。
しかし、実際の効果は、パスワード値が 123 の場合、alert($('#password').val()) は正しく 202cb962ac59075b964b07152d234b70 を出力しますが、バックグラウンドの PHP に投稿した後は、まだ 123 のままです。
data:$('#form1').serialize() は beforeSend より前の値を既に取得しているため、古い値が後の値に渡されたままになっているような気がします。
テスト後、md5暗号化部分を取り出して$.ajax()の前に置いて動作させれば問題ありません。このように使用するのは不便です。 beforeSendの後にserialize()を実行する方法はありますか?
補足:
@lisfan が提供するメソッドを使用すると、正常に投稿できます
しかし、バックグラウンドPHPの$_REQUESTも$_POSTもデータを受信できません。以下に示すように:
以下はfirebugで見たpostデータです。 上記はそれぞれ$_REQUEST、$_POST、php://inputを出力したデータです。 file_get_contents("php://input)に元のデータが表示されていることがわかります。 ") ですが、なぜ $_POST にカプセル化されないのでしょうか?
.
そうです、私の目的は、パスワードを送信する前にパスワードに対して md5 計算を実行し、パスワードを暗号化して送信する機能を実現することです。
しかし、実際の効果は、パスワード値が 123 の場合、alert($('#password').val()) は正しく 202cb962ac59075b964b07152d234b70 を出力しますが、バックグラウンドの PHP に投稿した後は、まだ 123 のままです。
data:$('#form1').serialize() は beforeSend より前の値を既に取得しているため、古い値が後の値に渡されたままになっているような気がします。
テスト後、md5暗号化部分を取り出して$.ajax()の前に置いて動作させれば問題ありません。このように使用するのは不便です。 beforeSendの後にserialize()を実行する方法はありますか?
補足:
@lisfan が提供するメソッドを使用すると、正常に投稿できます
しかし、バックグラウンドphpの$_REQUESTも$_POSTもデータを受け取ることができません。以下に示すように:
以下はfirebugで見たpostデータです。 上記はそれぞれ$_REQUEST、$_POST、php://inputを出力したデータです。 file_get_contents("php://input)に元のデータが表示されていることがわかります。 ") ですが、なぜ $_POST にカプセル化されないのでしょうか?
.
元の質問の構造を変更せずに、次のように変更して、*
アスタリスク
$.AJAX() リクエストを送信する前にパスワードを処理することができます。つまり、まず beforeSend 関数の内容を処理してからリクエストを送信し、$('#form1').serialize() のデータを保存します。正しいです
これは、関数 $('#form1').serialize() が beforeSend の前に呼び出されることを示しています。
検証機能でパスワードを入力する際、検証に合格した場合は、直接暗号化してフォームの非表示フィールドに割り当てることをお勧めします
リーリー
判断を取り除き、パスワード暗号化の背後に ajax を置きます。
これは、$.ajaxを実行すると、jsエンジンがリテラルオブジェクトを作成する際に、その時の$('#form1').serialize()の戻り値としてデータの値が格納されるためです。 、つまり 123 です。
次の例を確認できます:
var c=1;
var a={
};
console.log(a.b);// 1
a.d();//c=2
console.log(a.b);// 1
これで上記の問題が説明できます。
考えられる解決策は、リテラル オブジェクトを作成する前に md5 暗号化を移動することです。
まず第一に、パスワードの入力に md5 を割り当てる必要があるのはなぜですか? セキュリティ上のリスクはないのでしょうか?次に、beforeSend 関数は、Ajax メソッドの前ではなく、リクエストを送信する前に呼び出されます。ajax メソッドを呼び出すときは、すでにフォーム データを取り出して関数のパラメーターに設定しています。後でフォームの値を変更するにはどうすればよいですか。 Ajax データに関しては、まったく気まぐれです。 Ajaxメソッド呼び出しの前にパスワードmd5操作を入れるだけです
ajaxメソッドの前に暗号化されたパスワード文字列を準備します