我已经读过很多关于这个问题的问题,但是没有一个问题可以解决我的特定问题-我猜我在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。我已经从使用“ true”和“ false”(分别作为“ true”和“ false”出现)切换为使用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>);
问题是,如果不是'true','empty',或者我相信0,它将返回true。我很着急,否则我会为您更好地冲洗它。