试图在非常有用的“可移植”jscript库中实现一些服务器端错误检查输入。jQuery ajax返回意外数据类型
以下调用的伟大工程:
jQuery.ajax({
url: "index.php?option=com_catalogscontroller=batchsave",
data: {"formData": querydata.getData().splice(0, 1) },
dataType: 'JSON',
type: 'POST',
success: function (response) {
if(response.success) {
} else {
querydata.loadData(response.data);
}
}
});
我想到了就去做错误检查是最有效的方法是在服务器(PHP)侧,创建一个多维数组来跟踪服务器发现的任何错误,然后用相同的ajax调用中的表单数据返回该数组。所以我修改了服务器代码,将表单数据和错误数组返回给javascript ajax调用。即:
if(!empty($errors)) // $errors is an multi dimensional array same size as the form data
$result['success'] = false;
$result['msg'] = 'There were errors detected';
$result['data']['form'] = $formData;
$result['data']['errors'] = $errors;
}
echo json_encode($result);
,然后在客户端中,JavaScript例程上述已被修改为:
jQuery.ajax({
url: "index.php?option=com_catalogscontroller=batchsave",
data: {"formData": querydata.getData().splice(0, 1) },
dataType: 'JSON',
type: 'POST',
success: function (response) {
if(response.success) {
} else {
formErrors = response.data.errors; // formErrors is a global
querydata.loadData(response.data.form);
}
}
});
形式的原始功能被保留(表格数据被检索并在正确插入HTML),但formErrors返回给我的结果是莫名其妙。转让后,立即提醒“警报(formErrors)”显示类似的列表:
true,true,false,true,true
,我如能也警告在一个特定的指标没有问题alert(formErrors [0] [2]);会显示'假'。但在ajax调用之外,该数组似乎无法访问,导致“未定义”错误。并且在ajax调用和ajax调用alert(typeof formErrors)之外的例程中都显示'object'并且alert(formErrors)提供了与上面相同的逗号列表,但我不想要一个对象,我期待数组或者只要我可以通过索引访问它,我就会对一个对象感到满意。我在这里错过了什么?
看看会发生什么,如果你使用formErrors = JSON.stringify(response.data.errors);然后alert(formErrors); –
该警报给出了用方括号括起来的相同的逗号分隔字符串,即[true,true,false,true,true] – hugo
服务器端的'$ errors'的内容是什么?另外,我建议在调试像这样的情况下使用'console.log'或'debugger'。 – pdoherty926