【发布时间】:2011-08-12 02:43:40
【问题描述】:
这与我之前关于 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...
}
}
});
}
我观察到代码总是输入这个(我计划将此代码与我的其他表一起使用)所以我把过滤器放在这里:
$.extend(jQuery.jgrid.defaults, {
datatype: 'json',
serializeGridData: function(postData) {
var jsonParams = {
'SessionID': $.cookie("ID"),
'dataType': 'data',
'filters': filter,
'recordLimit': postData.rows,
'recordOffset': postData.rows * (postData.page - 1),
'rowDataAsObjects': false,
'queryRowCount': true,
'sort_fields': postData.sidx
};
return 'json=' + JSON.stringify(jsonParams);
},
loadError: function(xhr, msg, e) {
showMessage('HTTP error: ' + JSON.stringify(msg) + '.');
},
});
现在,我的问题是,为什么它显示错误消息“服务器错误:未指定参数'dataType'”?我已经在上面的代码中声明了 dataType ,但它似乎没有读取它。这里有没有人可以帮助我如何在网格上显示搜索到的数据?(一个函数是一个很好的帮助)
【问题讨论】:
-
了解服务器请求是使用 HTTP POST 还是 GET 很重要?在one old answer 我推荐你使用jqGrid 的
postData参数。你用它吗?您能否包括您使用的 jqGrid 的当前代码?您当前的serializeGridData实现忽略 jqGrid 的许多标准参数并覆盖 它。您能否描述一下您希望在服务器上以何种形式拥有哪些参数? -
在我看来,对于 jqGrid 和
jQuery.ajax如何构建用于服务器请求的 URL 存在误解(postData将如何用于附加带有附加参数的 URL)。如果需要,我可以准确地解释所有内容。您能否另外解释一下为什么您需要一些奇怪的 static 参数"dataType": "data"、"sort_fields":"main_account_group_desc"等等。Settings.ajaxDataType有什么值,为什么该值不是静态值 'json' 或 'xml'? -
Oleg,请查看我的编辑...我不像您之前的回答那样使用 postdata。这就是我使用的所有代码。如果我提醒 row_data,它会显示很好的答案。但网格显示所有数据。我真的无法解释 'Settings.ajaxDataType' 值有什么,因为我自己也不知道。我的前辈只告诉我使用它。
-
您能否在问题文本中包含
$('#list1')的jqGrid 定义代码? -
Oleg,我已经在这里发布了我对 $('#list1') 的 jqGrid 定义:stackoverflow.com/questions/5814131/jqgrid-search-filter____。请看我的编辑。谢谢
标签: javascript jquery search jqgrid