【发布时间】:2010-06-17 10:26:42
【问题描述】:
我正在使用 jqgrid 显示站点列表,并且我想在添加或编辑站点时进行一些服务器端验证。 (表单编辑而不是内联。由于各种原因,验证需要在服务器端进行。)
我认为最好的方法是在触发 beforeSubmit 事件时通过 ajax 请求检查数据。然而,这似乎只在我编辑网格中的现有行时才有效 - 当我添加新行时不会调用该函数。
我的 beforeSubmit 放错地方了吗?
感谢您的帮助。
$("#sites-grid").jqGrid({
url:'/json/sites',
datatype: "json",
mtype: 'GET',
colNames:['Code', 'Name', 'Area', 'Cluster', 'Date Live', 'Status', 'Lat', 'Lng'],
colModel :[
{name:'code', index:'code', width:80, align:'left', editable:true},
{name:'name', index:'name', width:250, align:'left', editrules:{required:true}, editable:true},
{name:'area', index:'area', width:60, align:'left', editable:true},
{name:'cluster_id', index:'cluster_id', width:80, align:'right', editrules:{required:true, integer:true}, editable:true, edittype:"select", editoptions:{value:"<?php echo $cluster_options; ?>"}},
{name:'estimated_live_date', index:'estimated_live_date', width:120, align:'left', editable:true, editrules:{required:true}, edittype:"select", editoptions:{value:"<?php echo $this->month_options; ?>"}},
{name:'status', index:'status', width:80, align:'left', editable:true, edittype:"select", editoptions:{value:"Live:Live;Plan:Plan;"}},
{name:'lat', index:'lat', width:140, align:'right', editrules:{required:true}, editable:true},
{name:'lng', index:'lng', width:140, align:'right', editrules:{required:true}, editable:true},
],
height: '300',
pager: '#pager-sites',
rowNum:30,
rowList:[10,30,90],
sortname: 'cluster_id',
sortorder: 'desc',
viewrecords: true,
multiselect: false,
caption: 'Sites',
editurl: '/json/sites'
});
$("#sites-grid").jqGrid('navGrid','#pager-sites',{edit:true,add:true,del:true, beforeSubmit : function(postdata, formid) {
$.ajax({
url : 'json/validate-site/',
data : postdata,
dataType : 'json',
type : 'post',
success : function(data) {
alert(data.message);
return[data.result, data.message];
}
});
}});
【问题讨论】:
-
使用beforeSubmit没有意义,明显是在数据提交到服务器之前触发的。您在 beforeSubmit 中单独提交只是为了验证。您的站点编辑/添加绑定到的 url(和代码)应该简单地处理验证和保存数据。在 afterSubmit 中,您将检查响应,可以是成功保存,也可以是验证错误。
标签: php javascript jquery validation jqgrid