Php jqGrid在插入和更新后重新加载数据

Php jqGrid在插入和更新后重新加载数据,php,mysql,json,jqgrid,reload,Php,Mysql,Json,Jqgrid,Reload,JqGrid的行为很奇怪。我只是创建了一些母版页,其中包含引用数据库中某个表的jqGrid 这个页面工作得很好,然后我需要使用相同的逻辑,我用附加的php文件复制了精确的页面,并创建了一些调整,使其指向正确的表 在我的母版页(部门页——第一页(工作100%))中,jqgrid函数工作正常,但在基于第一页的第二页和第三页中,jqgrid的行为很奇怪 当我创建新值或更新某些值时,jqgrid应该自动用新数据重新加载网格。但在我的例子中,网格会重新加载数据,但根本不会写入数据 这种奇怪的行为并没有发生

JqGrid的行为很奇怪。我只是创建了一些母版页,其中包含引用数据库中某个表的jqGrid

这个页面工作得很好,然后我需要使用相同的逻辑,我用附加的php文件复制了精确的页面,并创建了一些调整,使其指向正确的表

在我的母版页(部门页——第一页(工作100%))中,jqgrid函数工作正常,但在基于第一页的第二页和第三页中,jqgrid的行为很奇怪

当我创建新值或更新某些值时,jqgrid应该自动用新数据重新加载网格。但在我的例子中,网格会重新加载数据,但根本不会写入数据

这种奇怪的行为并没有发生在我的第一个jQGrid页面(dept页面)

我还插入了一些屏幕截图,使其更加清晰

然后简单地向网格添加值,引用一些php文件。执行该值,然后将其存储在数据库中。此方法使用POST方法

然后jQgrid自动从数据库中获取新数据,并将其写入网格。但在我的例子中,网格并没有写入数据

正如您在屏幕截图右下角看到的,有11个值,从第一个屏幕截图中,只有10个值。因此,网格实际上执行INSERT语句,但是当它重新加载时,它被破坏了

有没有可能克服这个问题??多谢各位

已编辑:HTML代码:


JavaScript代码:

$(文档).ready(函数(){
//警报(“启动”);
jQuery(“#位置”).jqGrid({
mtype:'GET',
url:'functions/get_location.php',
editurl:'functions/edit_location.php',
数据类型:“JSON”,
colNames:['Location ID','Location'],
colModel:[
{name:'idms_location',index:'idms_location',宽度:150,可编辑:true,add:true,del:true,key:true},
{name:'location',index:'location',width:800,可编辑:true,add:true,del:true}
],
loadComplete:函数(){
警报(“正常”);
},    
loadError:函数(jqXHR、textStatus、errorshown){
警报('HTTP状态代码:'+jqXHR.status+'\n'+
'textStatus:'+textStatus+'\n'+
'ErrorSprown:'+ErrorSprown);
警报('HTTP消息正文(jqXHR.responseText):'+'\n'+jqXHR.responseText);
},
rowNum:10,
行列表:[5,10,15],
寻呼机:“#寻呼机位置”,
sortname:“idms_位置”,
viewrecords:是的,
jsonReader:{repeatitems:true,idms_位置:“idms_位置”},
分拣员:“asc”,
标题:“MSC位置”
});
jQuery(“#location”).jqGrid('navGrid','#pager location',{edit:true,add:true,del:true},{},{},{},{},{closeAfterSearch:true},{});
jQuery(#location”).jqGrid('gridResize',{minWidth:350,maxWidth:850,minHeight:80,maxHeight:350});
//警报(“结束”);
});

我验证了您使用的代码并找到了原因您的代码中存在
id
重复问题
。您定义了用于jqGrid的
元素,如下所示


它将
位置“
作为
id
。后来你定义了

colModel:[
{name:'idms_location',index:'idms_location',宽度:150,可编辑:true,add:true,del:true,key:true},
{name:'location',index:'location',width:800,可编辑:true,add:true,del:true}
],
其中名称
位置
将用作列名。问题是列名将用于构建网格不同元素的
id
名称。此外,表单编辑将列名直接用作表示位置的
字段的
id
值。在使用addform之后,添加以下元素


也存在于带有
id=“location”
的页面上。如果用户关闭表单,它将被隐藏,但不会被销毁。因为编辑表单将放在中使用的下一个
$(“#位置tbody:first”)
之前的页面上,所以不要再查找表,网格保持为空

您应该做的只是将
重命名为类似
`的名称,或者选择任何其他名称。您应该更新对应的JavaScript代码

应在网格中进行的其他更改:

  • jsonReader:{repeatitems:true,idms_location:“idms_location”}
    更改为
    jsonReader:{id:“idms_location”}
  • 添加
    gridview:true
    选项
  • 添加
    autoencode:true
    选项
  • colModel
  • colModel
    中删除
    index
    属性
  • 您应该使用JSON数据修复服务器响应中使用的
    Content-Type
    HTTP头。它应该是
    Content-Type:application/json
    ,而不是您当前使用的
    Content-Type:text/html
    。这只是一行PHP代码
  • 您可以删除
    navGrid
    {edit:true,add:true,del:true}
    选项-这是默认选项

我明白了,它现在可以工作了,但还有一个问题,为什么在“部门”页面上可以工作,而在另一个页面上却不能工作?@randytan:您在“部门”页面上使用了不同的名称。表中有
id=“departments”
(末尾有“s”),列名是
“department”
(末尾没有“s”)。天哪!只是因为“s”。这让我今天很困惑。谢谢你的帮助,奥列格!祝你今天愉快。@randytan:还有一句话:你几乎不用投票来回答问题。这是非常重要的权利,因为投票是搜索引擎使用的主要标准。您每天有权投票选出30个问题或答案(请参阅)。所以我