-1

这是查询结果:["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
   });
4

3 回答 3

0

也许如果您的查询返回:

 "{ result : ["Language1","anotherLanguage","yetanotherlangugae"] }"

你会得到你想要的。

于 2011-08-20T17:25:51.653 回答
0

我想你正在寻找json.parse(json_string).
json.stringify()正在做它应该做的事情 - 将 Javascript 视为字符数组的内容转换为 JSON 样式的字符数组。

object = json.parse(string);
string = json.stringify(object);
于 2011-08-20T02:42:56.203 回答
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"}]

于 2011-08-20T03:43:52.170 回答