1

PHPスクリプトから送信されたエラーを処理しようとしています。これが私のコードです:

<script>
$(document).ready(function() {
    $('#signUpForm').submit(function() {
        $.ajax({
            type: 'POST',
            url: "process.php",
            data: $("#signUpForm").serialize(),
            success: function(data) {
                if ((data == "Incorect email format.") || (data == "Username must be between 6-32 signs and only include 0-9, A-Z   characters.") || (data == "Password must be between 8-32 signs and only include 0-9, A-Z characters.") || (data == "Passwords do not match.") || (data == "Username is taken, please try another one.")) {
                    $('#errors').show();
                    $('#errors').html(data);
                } else {
                    window.location.href = "http://localhost:8888";
                }
            }
        });
        return false;
    });
});
 </script>

Firebug は、応答が送信されたことを示していますが、エラーは表示されません。どこが問題になる可能性がありますか?ありがとう。

4

4 に答える 4

1

そのようなコードでは、最も可能性の高い理由は文字列が 1 文字か 2 文字ずれていることだと思います。何と比較しているのかを正確に確認するためconsole.log(data)に、ステートメントの前に右を置いてみてください。if

そのような問題をより簡単に回避できるように、エラーを少し異なる形式で返すことをお勧めします。たとえば、サーバーが次のような JSON を返すようにしたとします。

{
    "status": 1,
    "errorMessage": "Incorrect email format."
}

次に、文字列全体が正確であることを確認する代わりに、ゼロ以外のステータス コードをテストするだけで済みます。

于 2013-08-13T20:35:15.380 に答える
1

したがって、コメントでの議論と、サーバーから JSON 形式で新しい応答が返された場合、これらのエラーをレンダリングする方法は次のとおりです。

以下があなたの応答であると仮定します (このようなサイトで JSON 応答を常に検証してください):

[{"status":"1","data":"Incorrect email format."},{"status":"2","data":"Username must be min 6 signs and only include 0-9, A-Z characters."},{"status":"3","data":"Password must be min 8 signs and only include 0-9, A-Z characters."}]

成功関数でこの応答を取得している場合、html でそれらをレンダリングする方法は次のとおりです。

success: function (data) {
    if (data) {
        $.each(data, function (index, obj) {
            $('#error').append('<div>' + obj.data + '</div>');
        });
    }
}

これが実際の動作を示すjsfiddleです

于 2013-08-15T11:48:45.143 に答える
0

アラート (データ) を使用して正確に返されたデータを表示し、タイプミスがないかどうかを確認するか、Jemery が提案したように json を使用してください! これは、すべての文字列を比較するよりもはるかに簡単です。

例:

  $('#signUpForm').submit(function() {
    $.ajax({
    type: 'POST',
    url: "process.php",
    data: $("#signUpForm").serialize(),
    dataType: 'json',
    success: function (errorstatus) {
      if (errorstatus.status >= 1) {
       $('#errors').html(errorstatus.data);
      }
      else {
           window.location.href = "http://localhost:8888";
      }
    }
    });
  }

PHP では次のようにします。

$errorstatus = array(
  'status' => $status,
  'data' => $data
);

echo json_encode($errorstatus);
于 2013-08-13T20:47:36.170 に答える
-1

@RaphaelDDL が言ったように、console.log(data) を試して、php スクリプトから何が来ているかを確認してください。ただし、process.php を編集できる場合は、文字列全体を返すのではなく、エラー コードを返し、メッセージを js コードに格納することをお勧めします。つまり:

success: function(data) {
    if (data) {
        var error = "";
        switch (data) {
            case 1 : error = "Custom error msg 1"; break;
            case 2 : error = "Custom error msg 2"; break;
            case 3 : error = "Custom error msg 3"; break;
            ...
        }
        $('#errors').show();
        $('#errors').html(error);
    } else {
        ...
    }
}

そしてあなたのphpスクリプト:

$error_code = 0;
...
if ($some_value !== $valid_value) {
    $error_code = 1; 
}
...
die($error_code);

これを行うために使用die()することが、js スクリプトに他の文字を送信していないことを確認する唯一の方法です。

于 2013-08-13T20:46:52.093 に答える