3

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

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

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

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

接收端的 Avar_dump($_GET)举个例子:

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

在类似情况下, Avar_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> 
4

3 回答 3

1

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

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

有2个问题浮现在脑海:

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

如果没有关于函数dataTable和生成的 html 的更多内容,就没有更多关于这个问题的内容了。

于 2013-04-02T18:17:42.723 回答
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];
}
于 2013-04-02T17:41:59.007 回答
0

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

于 2013-04-02T20:41:31.470 回答