2011-10-13 95 views
0

我对PHP非常新,虽然我对JavaScript非常熟悉,但我正在学习如何使用大量的jqGrid插件。我想了解jqGrid如何序列化网格数据以及PHP如何分析这些数据。目前,我甚至没有连接到MySQL,但我只是试图将序列化的jqGrid数据回显为“假”结果。我对JS下面的代码在我的PHP文件的头:jqGrid serializegriddata解析在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>'; 
?> 

当我从JS中删除了serializegriddata选项,一切正常(我还添加了默认的$ _POST ['page'],$ _POST ['rows'],$ _POST ['sidx'],$ _POST ['sord']]回到PHP)。问题出现在我添加serializegriddata的时候。

我正在寻找如何在客户端使用postData的任何示例(是否需要添加到serializegriddata的任何其他函数,或者我可以只返回postData)以及如何在PHP中正确解析此问题(如何$ _POST数据,然后如何解析和使用这些数据)。我知道这可能是一个非常简单的解决方案,但我发现的一切都只是谈论客户端,并没有提到服务器端。提前致谢。

回答

1

好吧,我有点慢,但我部分回答了我自己的问题。如果您设置了multipleSearch:true,那么所有jqGrid文档都会读取,就好像整个postData被解析为JSON字符串一样。我认为我必须将每个变量解析为postData JSON变量,然后将其传递给PHP。尽管该解决方案需要一些工作才能正确实现,但我缺少的一个事实是,使用multipleSearch:true时,这只会为AJAX调用添加一个“过滤器”变量。该过滤器变量分析如下:

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

和$过滤结果:

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

这是因为相对于multipleSearch:

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

一旦:假选项我得到了这个,我能够遍历我的搜索参数的所有实例并创建我的$ where变量。有一件事对我来说几乎成了一个大问题,我能够找到的关于正确构建(下面的链接)的旧示例是,只能有1次只有WHERE是mysql_query。

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

我希望这可以帮助一个人在未来(它让我抓狂了将近2天直)。

0

你必须从服务器端发送的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的服务器端here完整的示例。

和文档是here

+0

我已经看过这个例子。它使用$ _GET从客户端检索信息。虽然我的例子非常简单,但我需要序列化来自客户端的数据,因为我需要使用多个搜索条件。对于单个搜索,我可以使用$ _GET ['sField'],$ _GET ['sValue']和$ _GET ['Oper']。但是,对于多个搜索条件,我将需要使用postData并在PHP中解析此JSON字符串。如何确保多重搜索的每个条件都包含在'postData'中,然后如何解析PHP中的JSON字符串'postData'。 – Michael