2014-12-24 31 views
1

我一直在尝试从grails控制器发送JSON响应以显示在jQuery数据表(v 1.9)中,但我收到空响应。无法发送JSON响应从grails控制器到jQuery数据表

这里是我的控制器: -

def breakHierarchy = 
{ 
    logger.info("breakHierarchy begins here"); 
    userObject = session.myBeanU; 
    userLoggedIn = userStatus.checkUserLoggedIn(userObject); 

    ArrayList<HierarchyBreakBean> mappingList; 
    JsonObject jsonResponse; 

    if(userLoggedIn) { 
     def hierarchyBreakInstance = new HierarchyBreak(params);       
     String[] divisionList = params.searsDivNumber; 
     String[] lineList = params.searsLineNumber; 
     String[] sublineList = params.searsSubLineNumber; 
     String[] classList = params.searsClass; 

     try { 
      mappingList = hierarchyBreakService.searchHierarchy(divisionList, lineList, sublineList, classList); 
      jsonResponse = hierarchyBreakService.loadData(request, response, mappingList); 
     } catch(Exception ex){ 
      logger.info("Exception in breakHierarchy: "); 
      ex.printStackTrace(); 
      hierarchyBreakInstance.errors.reject(message(code: ex.toString())); 
      render(view: "hierarchyBreak", model: [hierarchyBreakInstance: hierarchyBreakInstance]); 
      return; 
     } 
    } else { 
     redirect(action: loginError); 
    }  

    return; 
} 

这种方法loadData()的服务: -

try { 
     JsonObject jsonResponse = new JsonObject(); 
     jsonResponse.addProperty("sEcho", sEcho); 
     jsonResponse.addProperty("iTotalRecords", iTotalRecords); 
     jsonResponse.addProperty("iTotalDisplayRecords", iTotalDisplayRecords); 

     Iterator<HierarchyBreakBean> it = list.iterator(); 
     while(it.hasNext()){ 
      JsonArray row = new JsonArray(); 
      record = it.next(); 
      row.add(new JsonPrimitive("<input type='checkbox' class='singleSelect' id='item' name='item' value='' />")); 
      row.add(new JsonPrimitive(record.getSearsCategoryNumber())); 
      row.add(new JsonPrimitive(record.getSearsBusNumber())); 
      row.add(new JsonPrimitive(record.getSearsDivNumber())); 
      row.add(new JsonPrimitive(record.getSearsLineNumber())); 
      row.add(new JsonPrimitive(record.getSearsSublineNumber())); 
      row.add(new JsonPrimitive(record.getSearsClassNumber())); 
      row.add(new JsonPrimitive(record.getKmartDivNumber())); 
      row.add(new JsonPrimitive(record.getKmartDeptNumber())); 
      row.add(new JsonPrimitive(record.getKmartCatGroupNumber())); 
      row.add(new JsonPrimitive(record.getKmartCatgNumber())); 
      row.add(new JsonPrimitive(record.getKmartSubCatgNumber())); 
      row.add(new JsonPrimitive(record.getOrderSystem())); 
      row.add(new JsonPrimitive(record.getSearskmartOrderSystemCode())); 
      data.add(row); 
     } 

     jsonResponse.add("aaData", data); 
     response.setContentType("application/Json"); 
     response.getWriter().print(jsonResponse); 
     return jsonResponse; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

这是我用JS: -

var myTable = null; 

$("#searchButton").click(function(){  
    var url = appcontextPath + "/login/breakHierarchy"; 

    $("#row_header").show(); 
    myTable = $("#mappingTable").dataTable({"bServerSide": true, 
              "bProcessing": true, 
              "sAjaxSource": url, 
              "sPaginationType": "full_numbers", 
              "bJQueryUI": true, 
              "bDestroy": true, 
              "aaSorting": [[4,'asc']], 
              "bFilter": false,         
       "aoColumnDefs": [{"sWidth": "20%", "aTargets": [1,2,3,4,5], "sClass": "center"}, 
                  {"bSortable": false, "aTargets": [0]}] 
    }); 
}); 

“处理”栏中的数据表显示为空。 谁能告诉我我在这里错过了什么?任何帮助将非常感激。谢谢!

+0

在JS控制台应该有一些错误 – injecteer

+0

我没有在你的控制器中看到'render jsonResponse'; – dsharew

+0

@injecteer我的JS控制台很干净 –

回答

0

您的操作对您创建的JSON对象不起任何作用。无论是使用render data或返回的JSON对象作为操作的返回值:

mappingList = hierarchyBreakService.searchHierarchy(divisionList, lineList, sublineList, classList); 
jsonResponse = hierarchyBreakService.loadData(request, response, mappingList); 
render jsonResponse 

而且您的服务方法看起来Java的杂交。使用JSON生成器会降低50%的复杂度

+0

对不起,我是新来的Grails。我用Java编写了相同的代码,并通过Spring控制器发送了响应,并且它工作正常。但是我无法使用Grails发送响应。 –

+0

请参阅更新... – injecteer

+0

我使用了render jsonResponse,它给了我下面的JS错误: - Datatables警告:无法解析来自服务器的JSON数据。这是由JSON格式错误引起的。我也使用JSONResponse呈现为JSON,但它然后抛出错误java.lang.UnsupportedOperationException:JsonObject 您能否帮我解决这个问题! –

相关问题