Синтаксический анализ jqGrid serializegriddata в PHP - PullRequest
0 голосов
/ 13 октября 2011

Я чрезвычайно новичок в PHP и, хотя я довольно хорошо знаком с javascript, я сейчас изучаю, как использовать массивный плагин jqGrid.Я пытаюсь понять, как jqGrid сериализует данные сетки и как PHP анализирует эти данные.В настоящее время я даже не подключаюсь к MySQL, но просто пытаюсь отобразить сериализованные данные jqGrid в виде «поддельных» результатов.У меня есть следующий код для js в заголовке моего файла PHP:

<script type='text/javascript'>
   $(function(){
      $('#list').jgGrid({
         url:'grid.php',
         mtype:'POST',
         colNames:['json'],
         colModel:[{name:'j',index:'j',searchoptions:{sopt:['eq']},search:true}],
         pager:'#pager',
         rowNum:10,
         viewrecords:true,
         gridview:true,
         serializeGridData:function(postData){
            return postData;
         }
      })
   });
</script>

Затем я отправляю эту информацию в мой файл grid.php, который имеет следующий код:

<?php
   $jason = $_POST['postData'];
   $page = $jason->{'page'};
   echo '<rows>';
      echo '<page>1</page>';
      echo '<total>1</total>';
      echo '<records>1</records';
      echo '<row id="1">';
         echo '<cell>'.$page.'</cell>';
      echo '</row>';
   echo '</rows>';
?>

Когда я удаляю опцию serializegriddata из JS, все работает нормально (я также добавляю по умолчанию $ _POST ['page'], $ _POST ['lines'], $ _POST ['sidx'], $ _POST ['sord'] обратно в PHP).Проблема возникает, когда я добавляю serializegriddata.

Я ищу любые примеры того, как использовать postData на стороне клиента (какие-либо другие функции, которые мне нужно добавить к serializegriddata, или я могу просто вернуть postData) и как правильно проанализировать это вPHP (как $ _POST данных, а затем, как анализировать и использовать эти данные).Я знаю, что это, вероятно, чрезвычайно простое решение, но все, что я нахожу, говорит только о клиенте и ничего не говорит о стороне сервера.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Хорошо, я немного медлительн, но я частично ответил на свой вопрос.Вся документация jqGrid читается так, как будто все ваши postData были проанализированы как строка JSON, если вы установили множественный поиск: true.Я подумал, что мне нужно проанализировать каждую переменную в переменной JSON postData, а затем передать ее в PHP.Хотя для правильной реализации решения потребовалось немного усилий, но я упустил тот факт, что с множественным поиском: true это добавляет просто переменную 'filter' к вызову AJAX.Эта переменная фильтра анализируется следующим образом:

$filters = $_POST['filters'];
$json = json_decode($filters,true);

, а результат $ filters:

{"groupOp":"AND","rules":[{"field":"Customer","op":"eq","data":"eosp"}]}

В отличие от параметра множественного поиска: false:

$sField = $_POST['sField'];
$sValue = $_POST['sValue'];
$sOper = $_Post['sOper'];

Как только я получил это, я смог перебрать все экземпляры моих параметров поиска и создать переменную $ where.Одна вещь, которая почти стала для меня большой проблемой, это старый пример, который я смог найти о правильном построении (ссылка ниже), это то, что вы можете иметь только ГДЕ mysql_query только 1 раз.

http://blog.brzezinka.eu/webmaster-tips/jquery/how-to-enable-the-search-functionality-in-jqgrid

Я надеюсь, что это может помочь кому-то в будущем (это сводило меня с ума почти 2 дня подряд).

0 голосов
/ 13 октября 2011

Структура XML, которую вы должны отправить со стороны сервера:

<?xml version ="1.0" encoding="utf-8"?>
<rows>
  <page> </page>
  <total> </total>
  <records> </records>
    <row id = 'my_rowid'>
      <cell> cellcontent </cell>
      <cell> <![CDATA[<font color='red'>cell</font> content]]> </cell>
        …
    </row>
    <row id = 'my_rowid'>
      <cell> cellcontent </cell>
      <cell> <![CDATA[<font color='red'>cell</font> content]]> </cell>
        …
    </row>
      …
</rows>

Вы можете найти полный пример, который использует PHP на стороне сервера здесь .

и документация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...