jqGrid Закон Странная перезагрузка данных после вставки и обновления

JqGrid действует странно. Я просто создаю главную страницу, содержащую jqGrid, ссылающуюся на некоторую таблицу в моей базе данных.

Эта страница работает pefectly, тогда мне нужно использовать ту же логику, и я скопировал точную страницу с дополнительным файлом php и создаю некоторую настройку, чтобы она указывала на правую таблицу.

На моей главной странице (страница отдела – первая страница (работает на 100%)) функция jqgrid работает нормально, но на моей второй и третьей странице, которая основана на первой странице, jqgrid действует странно.

Когда я создаю новое значение или обновляю какое-то значение, jqgrid должен автоматически перезагружать сетку новыми данными. Но в моем случае сетка перезагружает данные, но НЕ пишет вообще.

Это странное поведение НЕ произошло на моей первой странице jQGrid (страница dept).

Я также вставляю скриншот, чтобы сделать его более понятным

Во-первых, я перезагружаю страницу. Консоль firebug говорит, что это загрузка данных JSON с сервера

Затем просто добавьте значение в сетку, ссылаясь на некоторый php-файл. Значение выполняется, а затем ЗАПОМНИТЬ в базе данных. Этот метод использует метод POST.

отправка данных POST из текстового поля в db

Затем jQgrid автоматически добавляет новые данные из базы данных и должен записывать на GRID. Но в моем случае сетка не записывает данные.

GET NEW Data, и это должно быть запись в сетке, но это не :(

Поскольку вы можете видеть нижнюю правую часть экрана, есть 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 .
  • вы должны исправить HTTP-заголовок Content-Type который вы используете в ответе сервера с данными JSON. Это должен быть Content-Type: application/json вместо Content-Type: text/html который вы используете в настоящее время. Это всего лишь одна строка кода PHP.
  • вы можете удалить опции {edit:true,add:true,del:true} navGrid – это параметры по умолчанию.