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

使用这样的代码,我想说最可能的原因是字符串是一个或两个字符。试着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

要么使用 alert (data) 来显示你到底得到了哪些数据,看看你是否打错了,或者像 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 回答