我对 $_GET
没有多少经验.我尝试始终使用 POST 方法,因此我可能会遗漏一些明显的东西。
我正在使用一个插件,它通过 GET 方法向服务器发送一个请求,其中的值是用 jQuery 完成的序列化形式 serialize()
不合时宜。
通常,至少在使用 $_POST
时是这样,该值将很容易分配给接收 PHP 文件中的工作变量。据我所知,这并没有发生。
它保留其序列化表示。当我试图用 $array = unserialize($string)
反序列化它时, 它给出了 bool(false)
返回。
A var_dump($_GET)
在接收端举个例子:
array(2) {
["hook"]=>
string(15) "hook%5B2%5D=107"
["_"]=>
string(13) "1364920519074" //This is a serial no. generated by the plugin
}
A 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() 更改,以适应只能处理硬数字的插件。所以这实际上显示了 2 种不同的方法来从选中的复选框中检索值。我相应地修改了标题。
<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
的实际内容是什么?
如果没有关于函数 dataTable
和生成的 html 的更多内容,关于这个问题就没什么可说的了。
关于php - $_GET 不反序列化/从选中的复选框中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15770363/