試圖在非常有用的「可移植」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