我对$_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',这正是我要找的。 p>
感谢您的帮助。
这是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>
答案 0 :(得分:1)
答案涉及错误的假设。隐含的假设:“javascript被正确发送到php”是错误的。
PHP收到字符串“?hook = hook%2b2%2d = 107&amp; _ = 1364920519074”并将其转换为上面显示的数组。
有两个问题需要考虑:
$.ajax()
之类的预定义发送方法?您是否使用其他框架进行数据传输?str
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/)。