我正在为我的班级中的一个方法工作,该方法输出ajax和常规post请求的错误消息。 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工作正常。
任何帮助都会很棒。感谢
答案 0 :(得分:1)
不要使用严格相等运算符===
,因为从PHP实际上发送的是字符串,而不是:
if (data.error === true)
使用:
if (data.error == true)
答案 1 :(得分: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
}
}
答案 2 :(得分:0)
header('Content-Type: application/json');
在回显PHP脚本之前添加此权限,让jquery知道它必须将整个字符串解析为JSON。
并使用“==”进行比较而不是“===”