Ajax调用:发送boolean解释为php

时间:2016-06-14 15:12:44

标签: php jquery ajax types boolean

我注意到在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脚本中转换变量?我可能错过了一些东西......

2 个答案:

答案 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代码中转换变量,因为数据会转换为(一个)字符串并以其形式发送。