将布尔值从 Ajax 传递给 PHP



我已经阅读了大量关于该主题的问题,但没有一个可以解决我的特定问题 - 我想我在JS中格式化对象数组的方式有问题。这是我的 Ajax 函数:

var marketing_prefs = [];
$('#save-marketing-prefs input').each(function() {
var tmp_array = {};
tmp_array['marketing_permission_id'] = $(this).val();
if ($(this).prop('checked')) {
tmp_array['enabled'] = 1;
} else {
tmp_array['enabled'] = 0;
}
marketing_prefs.push(tmp_array);
})
console.log(marketing_prefs);
$.ajax({
dataType: 'json',
type: 'POST',
url: ajax_object.ajaxurl,
data: {
action: 'acrew_save_mc_marketing_prefs',
marketing_prefs: marketing_prefs
},
success: function(response) {
console.log('#####', response);
},
error: function(response) {
console.error('!!!!!', response);
}
});

我正在做的是循环浏览一个带有三个复选框的简单表单,并创建一个对象数组,然后这些对象将转到 Mailchimp。我的数据完好无损,但问题是我的布尔值作为字符串传递给 PHP。我已经从使用真和假(作为"真"和"假"(切换到使用 1 和 0,但这些也作为字符串出现。

我想我可以遍历数据并在 PHP 中构建一个新数组,但数据到达时非常接近正确,似乎一定是不必要的。

如何将我的数据作为非字符串进行转换?

POST数据以简单的name=value对的形式发送,没有语法来指定数据类型,并且所有内容都解析为字符串。

可以调用intval($_POST['marketing_prefs'][$i]['enabled'])将其转换为整数。

另一种选择是将marketing_prefs数组转换为 JSON。

$.ajax({
dataType: 'json',
type: 'POST',
url: ajax_object.ajaxurl,
data: {
action: 'acrew_save_mc_marketing_prefs',
marketing_prefs: JSON.stringify(marketing_prefs)
},
success: function(response) {
console.log('#####', response);
},
error: function(response) {
console.error('!!!!!', response);
}
});

然后在 PHP 中你可以做:

$marketing_prefs = json_decode($_POST['marketing_prefs'], true);

正如Barmar所说,由于GET/POST不能指定数据类型(这本身就是一个咆哮(,一种方法不是强制转换它。

非常粗略的例子:

var_dump((bool) <variable>);

问题是如果它不是"真"、"空"或我相信 0,它会返回 true。 我赶时间,否则我会更好地为你冲洗它。

最新更新