$ _GET不反序列化/获取已选中复选框的值

时间:2013-04-02 17:25:25

标签: php javascript get

我对$_GET没有多少经验。我尝试总是使用POST方法,所以我可能会遗漏一些明显的东西。

我正在使用一个插件,它通过GET方法向服务器发送一个请求,其中一个序列化形式的值使用表单中的jQuery serialize()完成。

通常,至少在使用$_POST时,该值可以很容易地分配给接收PHP文件中的工作变量。据我所知,这种情况并没有发生。

它保持序列化表示。当我尝试使用$array = unserialize($string)对其进行反序列化时,它会返回bool(false)

接收端的var_dump($_GET)以此为例:

array(2) {
  ["hook"]=>
  string(15) "hook%5B2%5D=107"
  ["_"]=>
  string(13) "1364920519074" //This is a serial no. generated by the plugin
}

类似情况下的var_dump($_POST)会直接显示值'107',这正是我要找的。

感谢您的帮助。

这是Javascript:

$(document).ready(function () {
  var str;
  oTable = $("#myTable").dataTable({
    "fnServerParams": function (aoData) {
      aoData.push({
        name: 'hook',
        value: str
      });
    },
  });
  $("#filter").change(function () {
    str = $("#filter").serialize();
    oTable.fnReloadAjax("filter_prange.php");
  });
});

为了将来的参考,我将在看到来自Scones的评论之后修改脚本。所以解决方案是回到原始的php文件并改变检索值的方式。从表单中获取值的方法是从serialize()更改为了容纳插件,这只能处理硬数字。因此,这实际上显示了从已检查的复选框中检索值的两种不同方式。我相应修改了标题。

<script>
$(document).ready(function() {
    var str = [];
        oTable = $("#myTable").dataTable({
    "fnServerParams": function (aoData) {
        aoData.push({ name:'str', value:str });}
});

$("#filter").change(function(){
str=[];
 $('#filter :checked').each(function() {
   str.push($(this).val());
 });
oTable.fnReloadAjax("filter_prange.php");
 });

});    

这是触发所有这一切的形式:

                           <form id = "filter">
<input class="hook1" type="checkbox" value="115" name="hook[0]">  
<input class="hook1" type="checkbox" value="116" name="hook[1]"> 
<input class="hook1" type="checkbox" value="107" name="hook[2]">
</form> 

3 个答案:

答案 0 :(得分:1)

答案涉及错误的假设。隐含的假设:“javascript被正确发送到php”是错误的。

PHP收到字符串“?hook = hook%2b2%2d = 107&amp; _ = 1364920519074”并将其转换为上面显示的数组。

有两个问题需要考虑:

  • 为什么要使用自定义发送方法而不是$.ajax()之类的预定义发送方法?您是否使用其他框架进行数据传输?
  • str
  • 中提供的javascript中aoData.push({name : 'hook', value : str });},的真实内容是什么?

如果没有关于functin dataTable和生成的html的更多内容,那么就没有更多关于这个问题的说法。

答案 1 :(得分:0)

/**
 * Temp fix to get value. Try serializing the contents of the variable, and not the 
 * variable itself.
 */
if (preg_match('/\=(.*)/', $_GET["hook"], $match))
{
  $val = $match[1];
}

答案 2 :(得分:0)

我建议你编写自己的序列化方法来永远解决问题。但我有一个问题,你有没有找到从哪里以及为什么为复选框生成此序列化ID?我猜这种行为不是JQuery的一部分(参见:http://api.jquery.com/serialize/)。