繁体   English   中英

Ajax调用:发送的布尔值在php中解释为字符串

[英]Ajax call : sent boolean interpreted as string in php

我注意到,在AJAX调用(jQuery)中以type:boolean发送的变量在服务器端(PHP)被解释为type:string。 这是我的代码摘录,以说明这一点:

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脚本中强制转换变量? 我可能错过了一些东西

常规的帖子请求正文(从技术上来说,是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;
}

如果选择一个值集,当从字符串转换为布尔值时,PHP可以正确识别该值,则代码可以变得更简单:

$ref = (bool)$_POST['ref'];

或者,您可以让PHP完成所有艰苦的工作:

$ref = filter_input(INPUT_POST, 'ref', FILTER_VALIDATE_BOOLEAN);

或者,您可以使用纯文本来传输支持复杂数据类型并在客户端和服务器平台上均具有编码器/解码器的序列化复杂数据结构。 一个典型的选择是JSON。

您需要在PHP代码中强制转换该变量,因为数据将转换为(一个)字符串并作为数据发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM