jqgrid在表中显示之前修改ajax调用返回的数据

jqgrid在表中显示之前修改ajax调用返回的数据,ajax,jqgrid,Ajax,Jqgrid,我必须将从服务器接收到的一些数据显示为json对象,如下所示 {"rowndx":"0","rows":"25","rowstotal":"100","rowsdata":[ ["00","DEVICE001","T0_IHOME","1","***","1","10"], ["01","DEVICE002","NO_DEVICE","1","***","1","10"], ["02","DEVICE003","NO_DEVICE","0","***","1","10"], ..... 在

我必须将从服务器接收到的一些数据显示为json对象,如下所示

{"rowndx":"0","rows":"25","rowstotal":"100","rowsdata":[ 
["00","DEVICE001","T0_IHOME","1","***","1","10"], 
["01","DEVICE002","NO_DEVICE","1","***","1","10"],
["02","DEVICE003","NO_DEVICE","0","***","1","10"],
.....
在将接收到的数据显示在表格中之前,我希望在必要时进行更改,为数字添加单位或用文字替换数字(例如0->OFF 1->ON) 为此,我在ajax选项“success”中关联了我的编码函数。但是,在这种情况下,“Loading…”消息始终可见,不允许执行其他操作。 我将重新编码过程移到了“complete”ajax选项,这一次它似乎起了作用。 但我不明白我的错误是什么,我也不知道我的程序是否可行。 这是我的表ajax配置

    url      : "devtbl.json",
    mtype    : "POST",
    datatype : "json",
    postData : ......

    ajaxGridOptions: {
      type       : 'post',
      contentType: 'application/json',
      async      : false,
      complete   : DEVparse_serverdata,
      error      : function() { alert('Something bad happened. Stopping');},
    },

    jsonReader : {
      root        : "tablerows",
      page        : "currentpage",
      total       : "totalpages",
      records     : "totalrecords",
      cell        : "",
      id          : "0",
      userdata    : "userdata",
      repeatitems : true
    },
还有我的编码功能

    function DEVparse_serverdata(js , textStatus) {

  var jsontablereply = {} ;
  var rowsxpage_int  = parseInt(UB.rowsxpage.DEVtable) ;
  var jsonreply =  jQuery.parseJSON(js.responseText) ;

  jsontablereply.currentpage  = "" + (1 + (parseInt(jsonreply.rowndx) / rowsxpage_int));
  jsontablereply.totalpages   = "" + parseInt((parseInt(jsonreply.rowstotal) + (rowsxpage_int-1)) / rowsxpage_int) ;
  jsontablereply.totalrecords = jsonreply.rowstotal;

  jsontablereply.tablerows = [] ;
  $.each(jsonreply.rowsdata, function(ndx, row) {
     var rowarray = [] ;

     rowarray[0] = row[0] ;
     rowarray[1] = row[1] ;
     rowarray[2] = row[2] ;
     rowarray[3] = row[3] ;
     rowarray[4] = row[4] ;

     switch (row[2]) {
       case "NO_DEVICE":
            rowarray[5] = "***" ;
            break ;

       case "T0_IHOME":
            rowarray[5] = "T=" + row[5] + "°C" ;
            break ;
     }
     jsontablereply.tablerows[ndx] = rowarray ;
  }) ; // each

  jQuery("#DEVtbl")[0].addJSONData(jsontablereply);
}

(我是Jquery的初学者,我的编码风格很差)

有很多可能实现您的需求

在许多情况下,可以对
0->OFF 1->ON
的情况使用预定义或

另一种可能性是使用and。自定义格式化程序只是回调,jqGrid将在构建相应列单元格的HTML片段时使用它。如果您需要一些文本的通用显示,格式化程序如下所示

formatter: function (cellValue) { return $.jgrid.htmlEncode(cellValue); }
自定义格式化程序的优点是,您不仅可以对源文本进行许多修改,还可以基于其他列的信息构建单元格(请参见下面的
rawData
参数)

例如,第5列的自定义格式化程序可以是

formatter: function (cellValue, options, rawData, action) {
    switch (rawData[2]) {
    case "NO_DEVICE":
        return "***";
    case "T0_IHOME":
        return "T=" + $.jgrid.htmlEncode(cellValue) + "°C" ;
    default:
        return $.jgrid.htmlEncode(cellValue);
    }
}

还有一个选项是在处理前使用
回调。它与当前代码的逻辑非常接近。在
预处理
回调中,您可以在jqGrid处理数据之前对从服务器检索的数据进行任何修改。

您应该开始回答以前的问题。您可以使用自定义格式设置程序。
formatter: function (cellValue, options, rawData, action) {
    switch (rawData[2]) {
    case "NO_DEVICE":
        return "***";
    case "T0_IHOME":
        return "T=" + $.jgrid.htmlEncode(cellValue) + "°C" ;
    default:
        return $.jgrid.htmlEncode(cellValue);
    }
}