鉴于JSON响应表单,我需要解析JSON元素以查找错误消息及其关联元素,错误与之相关。
数据以JSON格式返回,错误消息为最后一个变量对,如下所示:
"invalid":[{"field1":"Field 1 is required"}]
这会导致每个错误都有一个对象/数组,显示项目的名称(键)以及该字段的相关错误。鉴于我的错误处理表单不知道键名是什么,我将如何获得该对象/数组的键和值?
我在这个项目上使用dojo并且我根本不熟悉它,所以我一直在尝试使用dojo函数,如果存在可以处理它的东西。目前我在哪里:
var retObj = dojo.fromJson(ioargs.xhr.responseText);
dojo.forEach(retObj.invalid, function(entry,i){
console.debug(entry);
});
控制台输出是:
Object { field1="Field 1 is required"}
我的目标是取出值“field1”,以便知道将此错误分配给哪个输入字段,然后将field1的值分配给该错误字段。
谢谢!
答案 0 :(得分:1)
Dunno关于Dojo的一件事,但你正在寻找一个非常基本的for in
循环。
var retObj = dojo.fromJson(ioargs.xhr.responseText),
invalids = retObj.invalid[0],
res = {}; //here will be your final key=>value
for (var key in invalids) {
res[key] = invalids[key];
}
您可能也对https://stackoverflow.com/search?q=%5Bjavascript%5Dparsing+json
感兴趣答案 1 :(得分:0)
如果您无权访问父对象,则无法找到对象的键。我认为在这种情况下最好的解决方案是按摩JSON以将更有意义的信息传递给验证器,即具有两个属性fieldName和errorMessage的对象。
// Returns the name of an object's first key
function getKeyName(obj) {
for (var prop in obj) {
return prop;
}
}
// This is the response from the server
var response = { "invalid":[{"field1":"Field 1 is required"}] };
// This is going to be the massaged array that
// contains more meaningful information.
var invalids = [];
for (var i=0; i < response.invalid.length; i++) {
var obj = response.invalid[i];
var key = getKeyName(obj);
invalids.push({fieldName: key, errorMessage: obj[key]})
}
现在invalids
包含一组更有意义的错误消息对象,例如
invalids = [{fieldName: 'field1', errorMessage: 'Field 1 is required'}]
只需将该对象传递给验证例程即可。如果可能的话,我会更改服务器代码,以我建议的格式返回错误消息,这样你就不需要做额外的工作了。