将布尔值从 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 控制器