jquery $ .getJSON - 处理结果类型

时间:2011-09-16 10:38:53

标签: jquery

使用$ .getJSON我的结果可以是空的,单个值或值列表。

如果结果包含单个值,我可以通过result.someReturnedValue访问数据,但是如果结果包含列表,则必须使用数组语法循环遍历结果数据以访问数据E.g.结果[I] .someReturnedValue

现在我不想两次编写相同的代码来处理每种类型的结果。 (我将结果附加到DOM元素,当我必须考虑两种符号时,代码变得越来越大)是否有一种通用的方法可以处理结果以防止这种重复?

单个结果的示例;

    $('div[id="'+divId+'"]').append("<td>" + result.someValue1+ "</td>");
$('div[id="'+divId+'"]').append("<td>" + result.someValue2+ "</td>");
$('div[id="'+divId+'"]').append("<td>" + result.someValue2+ "</td>");

多个结果的示例:

    $('div[id="'+divId+'"]').append("<td>" + result[i].someValue1+ "</td>");
$('div[id="'+divId+'"]').append("<td>" + result[i].someValue2+ "</td>");
$('div[id="'+divId+'"]').append("<td>" + result[i].someValue2+ "</td>");

3 个答案:

答案 0 :(得分:2)

让你的JSON返回一个对象或数组总是(如果没有结果,它可能是空的。)

然后,您可以迭代内容而无需特殊情况零,一个或多个元素(您将始终使用现在的“多个结果”代码路径)。如果你确实需要特殊情况,它也将是微不足道的:

switch(result.length) {
    case 0:
    case 1: // etc
}

答案 1 :(得分:1)

好的,我找到了解决这个问题的方法。您可以创建自己的Provider类,Jersey将在生成JSON响应时使用。

@Component
@Provider
public class 

JAXBContextResolver implements ContextResolver<JAXBContext> {

private final JAXBContext context;

private final Class[] cTypes = { SomeCustomClass.class };

public JAXBContextResolver() throws JAXBException {
    this.context = new JSONJAXBContext(JSONConfiguration.natural().build(),
            cTypes);
}

public JAXBContext getContext(Class<?> objectType) {
    for (Class type : cTypes) {
        if (type == objectType) {
            return context;
        }
    }
    return null;
}

此提供程序使用NATURAL JSON表示法,该表示法按列表格式的要求序列化对象。

通过包含必要的注释/ bean定义

,确保Spring知道该类

答案 2 :(得分:0)

  • result 总是是一个数组,即使它是空的或只有一个元素;
  • result[i]包含数组而不是按顺序编号的属性,并迭代它。