将布尔值从 Ajax 传递到 PHP

Posted

技术标签:

【中文标题】将布尔值从 Ajax 传递到 PHP【英文标题】:Pass Boolean Values from Ajax to PHP 【发布时间】:2020-04-09 09:20:46 【问题描述】:

我已经阅读了大量关于该主题的问题,但没有一个能够解决我的特定问题——我想我在 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 中构建一个新数组,但是当数据到达时,它非常接近正确,似乎它必须是不必要的。

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

【问题讨论】:

GET/POST 数据没有任何指定数据类型的方法,一切都是字符串。 谢谢,@Barmer。是的,我在旅行中发现了这一点,但在接收端传递 1 和 0 可能会更好/更容易解释为 bool。 @KevinNugent 为什么你到底想要这个? 【参考方案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);

【讨论】:

所以当我对数据进行字符串化时,它看起来像这样:[\"marketing_permission_id\":\"4af4cbc99a\",\"enabled\":1,\"marketing_permission_id\":\"61800c79a5\",\"enabled\":1,\"marketing_permission_id\":\"09a72e340f\",\"enabled\":1] 这就是为什么你需要在 PHP 中调用json_decode() 当我 intval 它只返回 0。 只有在字符串化两次时才会看到转义的反斜杠。 你如何看待这个结果?【参考方案2】:

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

非常粗略的例子:

var_dump((bool) <variable>);

问题是,如果它不是“真”、“空”或我相信 0,它将返回真。我很着急,否则我会更好地为你冲掉它。

【讨论】:

问题是我建议intval() 的原因。 一个非常好的建议,只要你像他现在一样传递数值。如果你想回到真/假,我认为强制转换是唯一的选择,至少在我有限的知识范围内。只要它是 POST 并且值肯定是已知的,cast 就不会太糟糕。不过,我个人会坚持使用整数。

以上是关于将布尔值从 Ajax 传递到 PHP的主要内容,如果未能解决你的问题,请参考以下文章

通过 Ajax 将布尔值传递给 asp.net api 控制器

如何将布尔值从应用程序委托传输到视图控制器?

使用php将布尔值返回给ajax

从 2 个不同的文本字段将 2 个值从 php 传递到 ajax

父组件更改道具(布尔值)时子组件不更新

通过 PHP GET 传递布尔值