Javascript 如何在jgrid上显示搜索到的数据

Javascript 如何在jgrid上显示搜索到的数据,javascript,jquery,search,jqgrid,Javascript,Jquery,Search,Jqgrid,这与我之前关于jqgrid的问题有关。我现在正在做一个搜索按钮,可以从服务器上搜索我输入的文本,并在jqgrid中显示这些数据(如果有的话)。现在,我所做的是创建一个存储过滤器的全局变量。以下是我搜索和显示的javascript代码: filter = ''; //this is my global variable for storing filters $('#btnsearchCode').click(function(){ var row_data = ''

这与我之前关于jqgrid的问题有关。我现在正在做一个搜索按钮,可以从服务器上搜索我输入的文本,并在jqgrid中显示这些数据(如果有的话)。现在,我所做的是创建一个存储过滤器的全局变量。以下是我搜索和显示的javascript代码:

    filter = ''; //this is my global variable for storing filters
    $('#btnsearchCode').click(function(){
       var row_data = '';
       var par = {
          "SessionID": $.cookie("ID"),
          "dataType": "data",
          "filters":[{
             "name":"code",
             "comparison":"starts_with",
             "value":$('#searchCode').val(),
          }],
          "recordLimit":50,
          "recordOffset":0,
          "rowDataAsObjects":false,
          "queryRowCount":true,
          "sort_descending_fields":"main_account_group_desc"
       }    
       filter="[{'name':'main_account_group_code','comparison':'starts_with','value':$('#searchCode').val()}]";
       $('#list1').setGridParam({
        url:'json.php?path=' + encodeURI('data/view') + '&json=' + encodeURI(JSON.stringify(par)), 
        datatype: Settings.ajaxDataType,  
       });
       $('#list1').trigger('reloadGrid');

       $.ajax({
           type: 'GET',
           url: 'json.php?' + $.param({path:'data/view',json:JSON.stringify(par)}),
           dataType: Settings.ajaxDataType,
           success: function(data) {
              if ('error' in data){
                 showMessage('ERROR: ' + data["error"]["msg"]);
              }
              else{                
                 if ( (JSON.stringify(data.result.main.row)) <= 0){
                     alert('code not found');
                 }
                 else{
                     var root=[];
                     $.each(data['result']['main']['rowdata'], function(rowIndex,  rowDataValue) {
                     var row = {};
                     $.each(rowDataValue, function(columnIndex, rowArrayValue) {
                        var fldName = data['result']['main']['metadata']['fields'][columnIndex].name;        
                        row[fldName] = rowArrayValue;                   
                     });
                     root[rowIndex] = row;
                     row_data += JSON.stringify(root[rowIndex]) + '\r\n';
                });         
             }
             alert(row_data);  //this alerts all the data that starts with the inputed text...
          }
      }
    });
  }

现在,我的问题是,为什么它会显示一条错误消息“服务器错误:未指定参数‘dataType’”?我已经在上面的代码中声明了数据类型,但它似乎没有读取它。这里有没有人可以帮助我如何在网格上显示搜索到的数据?(函数是一个很好的帮助)

我根据您两个问题的信息修改了您的代码。因此,代码将涉及以下内容:

var myGrid = $("#list1");

myGrid.jqGrid({
    datatype: 'local',
    url: 'json.php',
    postData: {
        path: 'data/view'
    },
    jsonReader: {
        root: function(obj) {
            var root = [], fields;

            if  (obj.hasOwnProperty('error')) {
                alert(obj.error['class'] + ' error: ' + obj.error.msg);
            } else {
                fields = obj.result.main.metadata.fields;
                $.each(obj.result.main.rowdata, function(rowIndex, rowDataValue) {
                    var row = {};
                    $.each(rowDataValue, function(columnIndex, rowArrayValue) {
                        row[fields[columnIndex].name] = rowArrayValue;
                    });
                    root.push(row);
                });
            }

            return root;
        },
        page: "result.main.page",
        total: "result.main.pageCount",
        records: "result.main.rows",
        repeatitems: false,
        id: "0"
    },
    serializeGridData: function(postData) {
        var filter = JSON.stringify([
            {
                name:'main_account_group_code',
                comparison:'starts_with',
                value:$('#searchCode').val()
            }
        ]);

        var jsonParams = {
            SessionID: $.cookie("ID"),
            dataType: 'data',
            filters: filter,
            recordLimit: postData.rows,
            recordOffset: postData.rows * (postData.page - 1),
            rowDataAsObjects: false,
            queryRowCount: true,
            sort_descending_fields:'main_account_group_desc',
            sort_fields: postData.sidx
        };

        return $.extend({},postData,{json:JSON.stringify(jsonParams)});
    },
    loadError: function(xhr, msg, e) {
        alert('HTTP error: ' + JSON.stringify(msg) + '.');
    },
    colNames:['Code', 'Description','Type'],
    colModel:[
        {name:'code'},
        {name:'desc'},
        {name:'type'}
    ],
    rowNum:10,
    viewrecords: true,
    rowList:[10,50,100],
    pager: '#tblDataPager1',
    sortname: 'desc',
    sortorder: 'desc',
    loadonce:false,
    height: 250,
    caption: "Main Account"
});
$("#btnsearchCode").click(function() {
    myGrid.setGridParam({datatype:'json',page:1}).trigger("reloadGrid");
});
您可以实时查看代码

代码在开头(第4行)使用
数据类型:'local'
,因此,如果单击“搜索”按钮,您将没有对服务器的请求。
serializeGridData
来自
serializeGridData
postData
参数的数据将与jqGrid的
postData
参数组合(将附加参数
“&path=“+encodeURIComponent('data/view')
)。此外,将继续发送所有标准jqGrid参数,并将另外发送带有自定义信息的新
json
参数

顺便说一下,如果您想重命名URL中使用的一些标准参数,如使用
recordLimit
而不是
,您可以在表单中使用参数

prmNames: { rows: "recordLimit" }

了解您是使用HTTP POST还是GET处理服务器请求很重要?在中,我建议您使用jqGrid的
postData
参数。你用它吗?你能包括你使用的jqGrid的当前代码吗?您当前的
serializeGridData
实现忽略了jqGrid的许多标准参数,并用自己的代码编写了它。您能描述一下您希望在服务器上使用哪种形式的参数吗?在我看来,jqGrid和
jQuery.ajax
如何构建用于服务器请求的URL存在误解(如何使用
postData
将URL附加其他参数)。如果需要的话,我可以解释清楚。您能否另外解释一下为什么需要一些奇怪的静态参数“数据类型”:“数据”,
“排序字段”:“主帐户”\u组描述”
等等。什么值具有
设置。ajaxDataType
以及为什么该值不是静态值“json”或“xml”?Oleg,请参阅我的编辑。。。我不像你以前的回答那样使用postdata。这就是我使用的所有代码。如果我提醒行_数据,它将显示正确答案。但网格显示所有数据。我真的无法解释“Settings.ajaxDataType”的值是什么,因为我自己也不知道。我的大四学生只告诉我使用它。你能在你的问题文本中包括jqGrid定义的代码<代码>$('#列表1')?Oleg,我已经在这里发布了我的jqGrid定义$('#列表1'):。请看我的编辑。谢谢你,我刚试过你的代码。。。是的,它现在正在工作。多谢奥列格。再一次,你帮助我。
prmNames: { rows: "recordLimit" }