我正在使用jQuery帖子将复选框值发布到另一个文件,我知道该页面有效并且逻辑正确,因为当我不使用jQuery post时,页面工作正常,问题是它似乎弄乱了数组,因此导致它无法正常工作
我的radio
字段使用以下表单字段:
<input type="checkbox" name="radio[]" value="<? print $id; ?>">
发布到下一页时
由if ($_POST['radio']){
foreach($_POST['radio'] as $val) {
这就是当我作为普通表单提交时发布的帖子,使用print_r($_POST);
Array (
[radio] => Array (
[0] => 13
[1] => 12
)
[ros] => sell
[submit] => submit
)
这工作正常,问题是它在jQuery AJAX中不起作用,所以我可以在不刷新的情况下处理数据,当我使用jQuery AJAX发布表单时,数据如下所示:
Array (
[ros] => sell
[submit] => submit
[radio] => radio %5B %5D=15&radio%5B%5D=14&ros=sell
)
这是我的jQuery AJAX后脚本:
function submitgarage() {
var submit = $("input[name=submit]").val();
var ros = $("#ros option:selected").val();
var radio = $("#garageform").serialize();
$.post("ajax/vehicles/garage.php", { ros: ros, submit: submit, radio: radio },
function(data) {
$('#results').html(data);
});
}
如您所见,它正在添加%5B
%5D
等,我尝试使用utf8_decode
,导致服务器500错误,尝试使用urldecode
,我怀疑无论如何都行不通,我是对的,我似乎无法让它像以前一样发布。
我已经检查了堆栈溢出上的其他主题以获取同类内容,但似乎找不到解决方案。
jQuery 的 AJAX 序列化给定的数据对象,但你已经序列化了单选字段,所以你得到了它序列化两次。
radio
变量需要是一个数组,而不是已经序列化的数据。
var radio = $("#garageform [name='radio[]']:checked").get().map(function(e) {
return e.value;
});
parse_str它与您的示例帖子配合得很好:
parse_str("radio %5B %5D=15&radio%5B%5D=14", $jqarr);
print_r($jqarr); // Only for print array
Array
(
[radio_] => Array
(
[0] => 15
)
[radio] => Array
(
[0] => 14
)
)