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