JqGrid действует странно. Я просто создаю главную страницу, содержащую jqGrid, ссылающуюся на некоторую таблицу в моей базе данных.
Эта страница работает pefectly, тогда мне нужно использовать ту же логику, и я скопировал точную страницу с дополнительным файлом php и создаю некоторую настройку, чтобы она указывала на правую таблицу.
На моей главной странице (страница отдела – первая страница (работает на 100%)) функция jqgrid работает нормально, но на моей второй и третьей странице, которая основана на первой странице, jqgrid действует странно.
Когда я создаю новое значение или обновляю какое-то значение, jqgrid должен автоматически перезагружать сетку новыми данными. Но в моем случае сетка перезагружает данные, но НЕ пишет вообще.
Это странное поведение НЕ произошло на моей первой странице jQGrid (страница dept).
Я также вставляю скриншот, чтобы сделать его более понятным
Затем просто добавьте значение в сетку, ссылаясь на некоторый php-файл. Значение выполняется, а затем ЗАПОМНИТЬ в базе данных. Этот метод использует метод POST.
Затем jQgrid автоматически добавляет новые данные из базы данных и должен записывать на GRID. Но в моем случае сетка не записывает данные.
Поскольку вы можете видеть нижнюю правую часть экрана, есть 11 значений, с 1-го снимка экрана есть только 10 значений. Таким образом, сетка фактически выполняет инструкцию INSERT, но когда она перезагружается, она сломана.
Есть ли возможности преодолеть это? Спасибо.
EDITED : HTML-код:
<table id="location"><tr><td /></tr></table> <div id="pager-location"></div>
Код JavaScript:
$(document).ready(function() { //alert("start"); jQuery("#location").jqGrid({ mtype:'GET', url:'functions/get_location.php', editurl:'functions/edit_location.php', datatype: "JSON", colNames:['Location ID','Location'], colModel:[ {name:'idms_location',index:'idms_location', width:150, editable:true,add:true, del:true, key:true}, {name:'location',index:'location', width:800,editable:true, add:true, del:true} ], loadComplete: function () { alert("OK"); }, loadError: function (jqXHR, textStatus, errorThrown) { alert('HTTP status code: ' + jqXHR.status + '\n' + 'textStatus: ' + textStatus + '\n' + 'errorThrown: ' + errorThrown); alert('HTTP message body (jqXHR.responseText): ' + '\n' + jqXHR.responseText); }, rowNum:10, rowList:[5,10,15], pager: '#pager-location', sortname: 'idms_location', viewrecords: true, jsonReader: {repeatitems: true, idms_location: "idms_location" }, sortorder: "asc", caption:"MSC Locations" }); 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}); //alert("end"); });
Я проверил код, который вы использовали, и нашел причину. У вас была id
проблема с кодом в коде . Вы определили элемент <table>
используемый для jqGrid следующим образом:
<table id="location"><tr><td /></tr></table> <div id="pager-location"></div>
Он имеет "location"
в качестве id
. Позже вы определили
colModel: [ {name:'idms_location',index:'idms_location', width:150, editable:true,add:true, del:true, key:true}, {name:'location',index:'location', width:800,editable:true, add:true, del:true} ],
где имя имени будет использоваться в качестве имени столбца. Проблема заключается в том, что имя столбца будет использоваться для создания id
различных элементов сетки. Кроме того, редактирование формы использует имя столбца direct как значение id
поля <input>
которое представляет собой местоположение . После использования формы Добавить следующий элемент
<input name="location" class="FormElement ui-widget-content ui-corner-all" id="location" role="textbox" type="text">
существует на странице с id="location"
. Если пользователь закрывает форму, он будет скрыт, но не будет уничтожен. Поскольку форма редактирования будет помещена на страницу до того, как <table id="location">
следующий $("#location tbody:first")
используемый в строке , не найдет таблицу больше, и сетка останется пустой.
Вы должны просто переименовать <table id="location">
в нечто вроде <table id="
grid-location"> `или выбрать любое другое имя. Вы должны обновить соответствующий код JavaScript.
Другие изменения, которые должны быть выполнены в сетке:
jsonReader: {repeatitems: true, idms_location: "idms_location" }
в jsonReader: {id: "idms_location" }
. gridview: true
. autoencode: true
. add:true, del:true
свойства из colModel
index
из colModel
. Content-Type
который вы используете в ответе сервера с данными JSON. Это должен быть Content-Type: application/json
вместо Content-Type: text/html
который вы используете в настоящее время. Это всего лишь одна строка кода PHP. {edit:true,add:true,del:true}
navGrid
– это параметры по умолчанию.