jQuery Select2和Struts 2 JSON插件

时间:2013-09-25 06:26:27

标签: java jquery json struts2 jquery-select2

我正在尝试填充Struts2 JSONSelect2一个选择。服务器正在返回这样的JSON:

{"orphanets":[{"idDiagOrphanet":11509,"nomDiagOrphanet":"FACOMATOSIS CESIOFLAMMEA"},{"idDiagOrphanet":21782,"nomDiagOrphanet":"AUTOINFLAMMATION"}]}

如何格式化/解析结果以使其有效?我知道它需要"id""text"字段,但无法使其正常工作:

 $("#selCodOrphanet").select2({
    quietMillis: 300,
    placeholder: "Buscar diag. Orphanet...",
    minimumInputLength: 4,
    ajax: {
        url: '../json/getOrphanets',
        dataType: 'json',
        data: function (term, page) {
          return {
            term: term
          };
        },                  
        results: function (data, page) {
          return { results: data.orphanets };
        },
        id: function(item) {
          return item.idDiagOrphanet; 
        },
        formatResult: function(item) { 
            return "<div class='select2-user-result'>" + item.nomDiagOrphanet + "</div>"; 
        }
    }
});

2 个答案:

答案 0 :(得分:0)

我尝试了一些搜索,但未找到id: function(item) {

无论如何,这是一个快速修复

  1. 将响应视为普通字符串
  2. idDiagOrphanet替换为id,将nomDiagOrphanet替换为text,然后返回此字符串而不是return { results: data.orphanets };
  3. 这是另一种方式: Modifying a JSON object by creating a New Field using existing Elements

    var ornts= data.orphanets;
    var new_obj ;
    for(var i=0; i<data.orphanets.length; i++){
        var person = persons[i];
        new_obj.push({
            id: ornts.idDiagOrphanet,
            text: ornts.nomDiagOrphanet,
        });
    }
    
    return new_obj;
    

答案 1 :(得分:0)

尝试

 $("#selCodOrphanet").select2({
    placeholder: "Buscar diag. Orphanet...",
    minimumInputLength: 4,
    ajax: {
        url: '<s:url namespace="/json" action="getOrphanets"/>',
        dataType: 'json',
        quietMillis: 100,
        data: function (term, page) {
          return {
            term: term
          };
        },                  
        results: function (data, page) {
          return { results: data.orphanets };
        },
        id: function(item) {
          return item.idDiagOrphanet; 
        },
        formatResult: function(item) { 
            return "<div class='select2-user-result'>" + item.nomDiagOrphanet + "</div>"; 
        }
        escapeMarkup: function (m) { return m; }  
    }
});

为名称空间为getOrphanets的{​​{1}}操作添加了限定网址映射。应该进行相应的配置。因为您在结果中显示HTML,所以不要转义标记。