0

我正在我的班级中研究一种方法,该方法为 ajax 和常规发布请求输出错误消息。PHP 部分工作正常,但 json 部分似乎没有。这是我的方法:

public $formError = false;
public $phpErrors = '';
public $jsonErrors = array();

// ------------------------------------------------------------
// ERROR PROCESSING
// ------------------------------------------------------------
private function responseMessage($bool, $msg) {
    $return['error'] = $bool;
    $return['msg'] = $msg;
    if (isset($_POST['plAjax']) && $_POST['plAjax'] == true) {
        $this->jsonErrors[] = $return;
    } else {
        foreach ((array) $msg as $key => $value) {
            $this->phpErrors .= $msg;
        }
    }
    $this->formError = true;
}

我认为,问题在于,无论是单个错误消息还是多个错误消息,json 对象总是用方括号括起来。我在网上找不到任何可以显示示例的内容。消息如下所示:

单一错误:

[{"error":true,"msg":"错误信息 1 ..."}]

多个错误:

[{"error":true,"msg":"错误信息 1 ..."},{"error":true,"msg":"错误信息 2 ..."}]

Firebug 显示 200 OK 但我的 JQuery 没有输出任何消息:

$.ajax({
    type: 'POST',
    url: plSubmitUrl,
    data: plFormData,
    dataType: 'json',
    cache: false,
    timeout: 10000,
    success: function (data) {
        if (data.error === true) {

            // display error message
            plResponse(data.msg, true);

            ...
        } else if (data.error === false) {

            // display success message
            plResponse(data.msg, true);

            ...
        }
    },

当我一次只显示一条消息时,JQuery 工作正常。

任何帮助都会很棒。谢谢

4

3 回答 3

1

不要使用严格的相等运算符===,因为您实际上是从 PHP 发送字符串,例如:

if (data.error === true) 

采用:

if (data.error == true) 
于 2012-06-04T16:58:43.277 回答
0

由于多个错误包含多个索引,因此它可能不会选择数据。检查长度是否超过错误。

$.ajax({
type: 'POST',
url: plSubmitUrl,
data: plFormData,
dataType: 'json',
cache: false,
timeout: 10000,
success: function (data) {
    var x = data.length;

    if(x == 1){
        if (data.error === true) {

           // display error message
            plResponse(data.msg, true);

        ...
        } else if (data.error === false) {

          // display success message
           plResponse(data.msg, true);
        }
   }else{
       jQuery.each(data,function(key,val){
           // do whatever you need
       }

}

于 2012-06-04T16:56:30.313 回答
0
header('Content-Type: application/json');

在你的 PHP 脚本中回显之前添加这个,让 jquery 知道它必须将整个字符串解析为 JSON。

并使用“==”进行比较而不是“===”

于 2012-06-04T17:10:52.917 回答