ホームページ  >  記事  >  バックエンド開発  >  javascript - jqueryの$.ajax()が間違ったデータをphpのポストに送信します

javascript - jqueryの$.ajax()が間違ったデータをphpのポストに送信します

WBOY
WBOYオリジナル
2016-07-06 13:51:581060ブラウズ

リーリー

そうです、私の目的は、パスワードを送信する前にパスワードに対して md5 計算を実行し、パスワードを暗号化して送信することです。

しかし、実際の効果は、パスワード値が 123 の場合、alert($('#password').val()) は正しく 202cb962ac59075b964b07152d234b70 を出力しますが、バックグラウンドの PHP に投稿した後は、まだ 123 のままです。

data:$('#form1').serialize() は beforeSend より前の値を既に取得しているため、古い値が後の値に渡されたままになっているような気がします。

テスト後、md5暗号化部分を取り出して$.ajax()の前に置いて動作させれば問題ありません。このように使用するのは不便です。 beforeSendの後にserialize()を実行する方法はありますか?

補足:
@lisfan が提供するメソッドを使用すると、正常に投稿できます

リーリー

しかし、バックグラウンドPHPの$_REQUESTも$_POSTもデータを受信できません。以下に示すように:
javascript - jqueryの$.ajax()が間違ったデータをphpのポストに送信します

以下は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もデータを受け取ることができません。以下に示すように:
javascript - jqueryの$.ajax()が間違ったデータをphpのポストに送信します

以下は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メソッドの前に暗号化されたパスワード文字列を準備します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。