尝试对非常有用的“handsontable”jscript 库中的输入进行一些服务器端错误检查。
以下调用效果很好:
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 调用。IE:
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 返回的结果让我感到莫名其妙。赋值 'alert( formErrors )' 后立即出现的警报显示类似于列表的内容:
true,true,false,true,true
而且我还可以毫无问题地提醒特定索引,例如 alert( formErrors[0][2] ); 将显示“假”。但在 ajax 调用之外,该数组似乎无法访问,出现“未定义”错误。在 ajax 调用和 ajax 调用之外的例程中,警报(typeof formErrors)显示“对象”,警报(formErrors)给出与上面相同的逗号列表,但我不想要一个对象,我期待一个数组或者我会对一个对象感到满意,只要我可以通过索引访问它。我在这里想念什么?