jQuery AJAX post 正在更改帖子数据中的字符



我正在使用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
)
)

最新更新