Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\u GET未反序列化/从复选框中获取值_Php_Javascript_Get - Fatal编程技术网

Php $\u GET未反序列化/从复选框中获取值

Php $\u GET未反序列化/从复选框中获取值,php,javascript,get,Php,Javascript,Get,我对$\u GET没有太多经验。我总是尝试使用POST方法,所以我可能遗漏了一些明显的东西 我正在使用一个插件,它通过GET方法向服务器发送一个请求,带有一个序列化表单中的值,该值由jQuery serialize在表单外完成 通常,至少在使用$\u POST时,该值可以很容易地分配给接收PHP文件的工作变量。据我所知,这并没有发生 它保留其序列化表示。当我试图用$array=unserialize$string取消序列化它时,它给出了boolfalse返回 接收端的var_dump$_GET给

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

我正在使用一个插件,它通过GET方法向服务器发送一个请求,带有一个序列化表单中的值,该值由jQuery serialize在表单外完成

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

它保留其序列化表示。当我试图用$array=unserialize$string取消序列化它时,它给出了boolfalse返回

接收端的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> 

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

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

有两个问题需要考虑:

为什么要使用自定义发送方法而不是预定义的方法,如$.ajax?您是否使用其他框架进行数据传输? aoData.push{name:'hook',value:str};}中提供的javascript中str的真实内容是什么,
如果没有关于functin dataTable和生成的html的更多内容,就无法再谈论这个问题。

我建议您编写自己的序列化方法来永远解决这个问题。但是我有一个问题,您是否已经了解了为复选框生成此序列化id的位置和原因?我想这不是JQuery的一部分:。

我假设这是PHP,是吗?您可能想在问题中添加一个标记。发送请求的JavaScript代码是什么样子的?看起来好像它正在发送一个编码的钩子[2]=107。很抱歉搞砸了。我在原始帖子中添加了js脚本,回答了Slayer先生。是的,没错。这些是名为hook[number]的表单复选框。这意味着在本例中选中了值为107的第三个复选框。@Bernard在这种情况下,JavaScript序列化而不是PHP反序列化存在问题。也许你可以提供更多关于JS插件的细节,是吗?嗨,肯恩。当脚本中只有一个值时,它就完成了工作,但当有多个值出现时,它就不起作用了。如何使其适用于多个值。我试图将$val作为数组,但它不符合我的要求。谢谢。这有点复杂,但您可以使用preg_match_all,然后将foreach$matches[0]用作$match。同样,我认为您正在序列化令牌密钥op val,而不仅仅是val.Try.value.serialize或.text.serialize。看看我能不能回答你的问题。关于自定义发送方法,我完全同意你的看法,但插件就是这样设置的。因此fnReloadAjax在某种程度上是一种“定制的”Ajax调用。我在Ajax POST方法中进行了相同的设置,一切正常。但是如果我想有一个表插件,它肯定有很多优点,我需要适应。关于本案中str的内容为%5B2%5D=107。这是jquery序列化的结果,正如我在回复MrSlayer.try$'input[name=hook]:checked','filter'.val的注释中所解释的那样;而不是str=$filter.serialize;它应该会起作用。所以你只是在传递价值,谢谢你的烤饼。根据你的评论,我改变了方向,回到了信息的来源,而不是接收端。所以我尝试了这个'code'$'filter:checked'.eachfunction{str.push$this.val;};'“代码”而不是序列化,它工作得很好。我要感谢您为我指明了正确的方向。感谢用户…这实际上就是代码str=$filter.serialize;,当有人检查此项时,是否执行:。我在另一个php文件中有完全相同的脚本,结果完全相同。唯一的区别是,在这种情况下,它是一个带有POST方法的常规Ajax调用,可以顺利工作。
/**
 * 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];
}