ホームページ >バックエンド開発 >PHPチュートリアル >phpの出力値についての質問です。
簡単な HTML ログイン フォームを作成し、送信ボタンをクリックして、検証のために非同期で送信しました。 php ファイルはデータベースに接続してユーザー名とパスワードを検証します。それが正しい場合は文字列「true」がエコーされ、間違っている場合は出力値はありません。 HTMLを返した後、判断して応答アクションを実行します。しかし、テストしてみると、入力が間違っているか正しいかに関係なく、ページは依然として正しいことがわかりました。 php部分は正しく、フォーム送信データに基づいてレスポンス値を出力することはできますが、クライアント部分にバグがあると思われ、どう修正しても修正できません。 。以下はクライアント スクリプトです:
4ec11beb6c39d0703d1751d203c17053
$('#btn').click(function () {
$('#form2')。 ajaxSubmit ({
success:function(data) {
console.log(data+' '+typeof data);
console.log(data=='true');
if (データ) {
alter('ログイン成功!');
}else {
$('#tip5').html('ユーザー名またはパスワードが間違っています。再入力してください!')
}
},
})
})
2cacc6d41bbb37262a98f745aa00fbf0
入力エラー時のコンソール出力データは何ですか?
入力が間違っていると出力されません。これは私の php コードの一部です:
080bcdb8910dff4dd1e2b7cfa6e28811
エラーが発生した場合のコンソール出力データとは?
間違えると何も出力されません。これは私の php コードの一部です:
console.log(data=='true');
これらの 2 つの文は何を出力しますか?
console.log(data+' '+typeof data);
console.log(data=='true'); 2 つの文 出力は何ですか?
test.html:38 string
test.html:39 false
フォームを見てください
看守の表
この js スクリプトは、jq の ajax() メソッドを直接使用するように変更したものです。
このような検査
$(function() { //最好这样包起来,以防 jq 加载太慢 $('#btn').click(function () { $.ajax({ url:'plane/login.php', type:'post', data:{ 'name_login':'fengjie', 'psw_login':'123123', }, success:function(data) { alert(data); //直接查看返回的数据,如果 php 有问题,一样能看到 } }) })})
このような検査
$(function() { //最好这样包起来,以防 jq 加载太慢 $('#btn').click(function () { $.ajax({ url:'plane/login.php', type:'post', data:{ 'name_login':'fengjie', 'psw_login':'123123', }, success:function(data) { alert(data); //直接查看返回的数据,如果 php 有问题,一样能看到 } }) })})、ユーザー名パスワードが書き込まれた場合、値は「true」を示し、結果は無効で、値は空になります。 'の結果は false,怎么可能性は false???php 返される就是文字列型の 'true'啊!
alert(data.length); //次に返されるパケットの長さ
は、長さは 5 です、長さは 1 です。奇妙です、空のメッセージも長さを返しますか?
你可以进次多能的字符的内字是幾分
alert(data.charCodeAt(0));
場合が 32 より小さい場合、就表示你的程序多输出了 空格、制表符、回车、换行
場合結果 255 より大きい場合、就表示你的程序文件有 BOM 头
看来、これを破り、私は処理 ajax 隐性问题の能力を持っています
故に长度が異なるため、所為 dada == 'true' 不成立
の文字の内部コードはいくらか
alert(data.charCodeAt(0));
場合が 32 より小さい場合、就表示你的程序多输出了 空格、制表符、回车、换行
場合結果 255 より大きい場合、就表示你的程序文件有 BOM 头
看来、この違反を通じて、私たちは ajax のセキュリティ問題を処理する能力を持っています
長さが異なるため、dada == 'true' は成り立ちません
余分な文字の内部コードをさらに確認できます
alert(data.charCodeAt( 0));
これが 32 以下の場合は、プログラムがより多くのスペース、タブ、キャリッジ リターン、ライン フィードを出力することを意味します
それが 255 より大きい場合は、プログラム ファイルがBOM ヘッダーがあります
これを投げると、ajax の隠れた問題に対処できるようです
長さが異なるため、dada == 'true' は成立しません
エクストラの内部コードをさらに詳しく見ることができます
alert(data.charCodeAt(0));
これが 32 以下の場合、プログラムはより多くのスペース、タブ、改行を出力することを意味します。 >255 より大きい場合は、プログラム ファイルに BOM ヘッダーがあることを意味します
この問題を解決した後、ajax の隠れた問題に対処できるようです
プログラム ファイルから BOM ヘッダーを削除するだけです
ありがとうございます。trim を使用しました。プログラムは次のようになります。普通。しかし、これは根本的な原因ではなく、症状を解決するものであり、BOM ヘッダーがどのように追加されたのかがわかりません。私が使用しているエディターが原因であると言う人もいるので、別のエディターを試す必要があると思います。
utf-8 without bom
ファイルを保存する場合は、
utf-8 without bom
editplus の環境設定を見てみると、デフォルトの保存は BOM なしの utf-8 です。
そして、bb9bd6d87db7f8730c53cb084e6b4d2d タグ
の外側にスペースや空白行があるかどうかにも依存します。案の定、7e03a0c69f50421056697103b83422a0 タグの外側にはスペースや空白行などが含まれています。私は PHP を学んだばかりですが、たくさんの間違いを犯してしまいました。