猿问

将布尔值从 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。我已经从使用“true”和“false”的 true 和 false 切换到使用 1 和 0 但它们也作为字符串出现。


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


如何将我的数据作为非字符串获取?


拉风的咖菲猫
浏览 100回答 2
2回答

慕桂英3389331

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);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)&nbsp;<variable>);问题是,如果它不是“真”、“空”或我相信 0 它将返回真。我很着急,否则我会更好地为你冲掉它。
随时随地看视频慕课网APP
我要回答