我最近写了一个问题" jqGrid显示默认"加载"更新表/自定义更新时的消息 "的答案.在编写答案时,我想:为什么他使用addJSONData()函数刷新网格中的数据而不是相对于setGridParam()更改URL 并刷新jqGrid数据相对于trigger('reloadGrid')?一开始我想推荐使用'reloadGrid',但在考虑了这一点后,我明白我不太确定最好的方法是什么.至少,我不能用两句话解释为什么我更喜欢第二种方式.所以我认为它可能是一个有趣的讨论主题.
确切地说:我们有一个典型的情况.我们有一个网页,其中包含至少一个jqGrid和一些其他控件,如组合框(选择),复选框等,这使用户可以更改jqGrid中显示的信息的范围.通常我们定义一些事件处理程序jQuery("#selector").change(myRefresh).keyup(myKeyRefresh)
,我们需要根据用户的选择重新加载jqGrid容器.
在阅读并分析来自其他用户输入的信息后,我们可以至少以两种方式刷新jqGrid容器:
$.ajax()手动然后在成功内部或完成$.ajax调用句柄jQuery.parseJSON()(或eval),然后调用jqGrid的addJSONData函数.我在stackoverflow.com上发现了很多使用addJSONData的例子.我希望我们讨论这两种方式的优缺点.我目前使用第二种方式,所以我将从这一方面的优势开始.
可以说:我调用现有的Web服务,将接收的数据转换为jqGrid格式并调用addJSONData.这就是我使用addJSONData方法的原因!
好的,我会选择另一种方式.jqGrid可以直接在Web服务上调用并在网格内填充结果.有很多jqGrid选项,允许您自定义此过程.
首先,可以删除或重命名发送到服务器关于任何标准参数prmNames的jqGrid的选项或对于添加任何额外的参数POSTDATA选项(参见http://www.trirand.com/jqgridwiki/ doku.php?id = wiki:options).$.ajax通过定义serializeGridData()函数(jqGrid的另一个选项),可以在jqGrid发出相应请求之前立即修改所有构造的参数.更重要的是,可以$.ajax通过设置jqGrid的ajaxGridOptions选项来更改每个参数.我用ajaxGridOptions: {contentType: "application/json"}例如作为一般设置$.jgrid.defaults.该ajaxGridOptions选项是非常强大的.对于ajaxGridOptions …
我使用的是最新版本的jqGrid:3.6.4
这似乎是一个简单的问题(或者至少它在我花了几个小时之前做过):
当网格向服务器发送请求(到控制器操作)时,其内容类型始终为:
application/x-www-form-urlencoded; charset=UTF-8
Run Code Online (Sandbox Code Playgroud)
我希望它是:
application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
但是我找不到设置内容类型的方法(例如,没有像$ .ajax调用那样的contentType选项).
所以只是为了澄清,我不是问如何在jQuery服务器请求上设置内容类型,而是专门使用jqGrid,它没有提供明显的选项来执行此操作.
谢谢,奈杰尔.
更新: Oleg的回复修复解决了它.
以下是网格的选项设置:
jQuery("#ContactGridList").jqGrid({
url: '/ContactSelect/GridData/',
datatype: 'json',
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
mtype: 'POST',
...
Run Code Online (Sandbox Code Playgroud) 我使用jqGrid 3.6.4和jquery 1.4.2.在我的示例中,我正在遵循json数据格式,我想将这些json数据映射到jqgrid的行中
{
"page": "1",
"total": 1,
"records": "6",
"rows": [
{
"head": {
"student_name": "Mr S. Jack ",
"year": 2007
},
"sub": [
{
"course_description": "Math ",
"date": "22-04-2010",
"number": 1,
"time_of_add": "2:00",
"day": "today"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的jqgrid代码如下
jQuery("#"+subgrid_table_id).jqGrid({
url:"http://localhost/stud/beta/web/GetStud.php?sid="+sid,
dtatype: "json",
colNames: ['Stud Name','Year','Date'.'Number'],
colModel: [ {name:'Stud Name',index:'student_name', width:100, jsonmap:"student_name"},
{name:'Year',index:'year', width:100, jsonmap:"year"},
{name:'Date',index:'date', width:100, jsonmap:"date"},
{name:'Number',index:'number', width:100, jsonmap:"number"}
],
height:'100%',
jsonReader: { repeatitems : false, root:"head" },
});
Run Code Online (Sandbox Code Playgroud)
所以现在问题是我的数据,即student_name和year在"head"下,jqgrid可以找到这两个字段.同时其他两个列值,即日期和数字位于"子"下,甚至那些列我无法用jqgrid映射它
请帮助我如何在JQGrid中找到这些属性.
谢谢
基本
大家好,我已经看到tableToGrid方法(由Peter Romianowski)定义为tableToGrid(selector, options)jqGrid wiki,但无法找到任何有文档的options
有谁知道这些或在哪里找到它们?编辑:谢谢奥列格,解决了!
更多
我实际上要做的是将生成的jqGrid包含在a中form,这将提交checkbox表的列中的值.我的问题是该tableToGrid方法似乎是name从checkbox元素中删除属性,因此它们没有与表单发布一起提交.
jqgrid ×4
jquery ×3
checkbox ×1
content-type ×1
form-post ×1
html ×1
jqgrid-php ×1
json ×1
subgrid ×1