我注意到在AJAX调用(jQuery)中作为类型发送的变量:boolean被解释为服务器端的一个类型:字符串(PHP)。以下是我的代码摘录,用于说明:
Ajax电话:
$.ajax({
url : 'model/script.php',
type : 'POST',
data : ref,
success : function (data){
...
}
});
如果我在JS脚本中测试ref
变量类型:
var ref_type = jQuery.type(ref);
alert(ref_type);
// Result : boolean
如果我在PHP脚本中测试$_POST['ref']
类型:
if(isset($_POST['ref'])){
echo gettype($_POST['ref']);
}
// Result : string
有没有办法发送/接收一个布尔变量?或者我是否必须在PHP脚本中转换变量?我可能错过了一些东西......
答案 0 :(得分:1)
常规的帖子请求主体(从技术上讲,x-www-form-urlencoded
消息)只是文本。偶数也是文字。一切都是文本,因为最终这是浏览器发送和服务器收到的内容:
Name=John%20Smith&Age=35&Subscribed=true
只需为true / false选择一个约定,并在服务器端代码中进行显式转换:
switch ($_POST['ref']) {
case 'yeah':
$ref = true;
break;
case 'nope':
$ref = false;
break;
default:
$ref = null;
}
如果您选择一个值集,当any character代码变得更简单时PHP将正确识别:
$ref = (bool)$_POST['ref'];
或者你可以让PHP做所有艰苦的工作:
$ref = filter_input(INPUT_POST, 'ref', FILTER_VALIDATE_BOOLEAN);
或者,您可以使用纯文本来传输支持复杂数据类型的序列化复杂数据结构,并在客户端和服务器平台上都具有编码器/解码器。典型的选择是JSON。
答案 1 :(得分:0)
您需要在PHP代码中转换变量,因为数据会转换为(一个)字符串并以其形式发送。