【发布时间】:2013-04-02 17:25:24
【问题描述】:
我对@987654323@ 没有太多经验。我尝试总是使用 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 的 cmets 之后展示了修改后的脚本。因此解决方案是返回原始 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>
【问题讨论】:
-
我认为这是 PHP,是吗?您可能想在问题中添加php 标签。
-
发送请求的 JavaScript 代码是什么样的?看起来好像它正在发送编码的
hook[2]=107。 -
抱歉给我带来了麻烦。我在原帖中添加了js脚本,
-
回答 MrSlayer。对,那是正确的。这些是名为 hook[number] 的表单复选框。这意味着在这种情况下,选中了值为 107 的第三个复选框。
-
@BernardA 在这种情况下,JavaScript 序列化而不是 PHP 反序列化存在问题。或许您可以提供更多关于 JS 插件的详细信息(是 DataTables)?
标签: php javascript get