将布尔值从Ajax传递到PHP

问题描述 投票:0回答:2

我已经读过很多关于这个问题的问题,但是没有一个问题可以解决我的特定问题-我猜我在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中构建一个新数组,但是数据到达时非常接近正确,以至于看起来好像不必要。

如何获取非字符串形式的数据?

php json ajax mailchimp
2个回答
1
投票

[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);

-1
投票

由于,正如Barmar所说的那样,GET / POST无法指定数据类型(这本身就是一种麻烦),一种方法不是强制转换。

非常粗糙的例子:

var_dump((bool) <variable>);

问题是,如果不是'true','empty',或者我相信0,它将返回true。我很着急,否则我会为您更好地冲洗它。

© www.soinside.com 2019 - 2024. All rights reserved.