以下是查询结果:["Language1","anotherLanguage","yetanotherlangugae"]
Javascriptmvc的模型类findAll方法返回(通过成功回调)一个javascript对象数组。该框架负责将服务器返回的文本转换为javascript对象数组。如果查询结果如上所述,则数组中的每个字符串都被视为一个关联数组,其中键是字符的索引,而值是字符的值。结果如下所示。
调用JSON.stringify的结果如下所示。
[{"0":"L","1":"a","2":"n","3":"g","4":"u","5":"a","6":"g","7":"e","8":"1"},{"0":"a","1":"n","2":"o","3":"t","4":"h","5":"e","6":"r","7":"L","8":"a","9":"n","10":"g","11":"u","12":"a","13":"g","14":"e"},{"0":"y","1":"e","2":"t","3":"a","4":"n","5":"o","6":"t","7":"h","8":"e","9":"r","10":"l","11":"a","12":"n","13":"g","14":"u","15":"g","16":"a","17":"e"}]
查询由javascriptmvc模型完成,上面显示的结果返回传递给成功回调。查询结果将转换为三个JSON对象的数组。这里发生了什么?
这不是调用JSON.parse的问题。在通过成功回调将响应传递给我时,响应已经被解析为json对象。
结果应该是一个JSON对象数组,如果以自然方式序列化为字符串,则看起来就像来自服务器的原始响应。这不是这种情况,因而也是问题。
以下是执行实际findAll查询的代码段:
$.ajax({
url: '/language',
type: 'get',
dataType: 'json',
data: params,
success: this.callback(['wrapMany',success]),
error: error
});
答案 0 :(得分:0)
我认为你正在寻找json.parse(json_string)
json.stringify()
正在做它应该做的事情 - 将Javascript看作字符数组的内容转换为JSON样式的字符数组。
object = json.parse(string);
string = json.stringify(object);
答案 1 :(得分:0)
找到答案。
使用javascriptmvc生成模型时,会为findAll方法生成以下内容:
$.ajax({
url: '/language',
type: 'get',
dataType: 'json',
data: params,
//success: this.callback(['wrapMany',success]),
success: success,
error: error
});
注意注释掉的行。它在响应上调用wrapMany。预期的响应是JSON对象的数组,而不是字符串。如果响应是字符串数组,则每个字符串都将转换为JSON对象,因此您将在问题中看到结果。
因此,服务器不应该返回["lan1", "lan2"]
,而应该回复[{"language" : "lan1"}, {"language" : "lan2"}]
答案 2 :(得分:0)
可能是您的查询返回:
"{ result : ["Language1","anotherLanguage","yetanotherlangugae"] }"
你会得到你想要的东西。