【问题标题】:Ajax call : sent boolean interpreted as string in phpAjax 调用:发送的布尔值在 php 中解释为字符串
【发布时间】:2016-06-14 15:12:43
【问题描述】:

我注意到在 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 脚本中转换变量?我可能错过了什么……

【问题讨论】:

  • 你不能发送一个布尔值,它是一个 HTTP 请求。您必须在您的 PHP 脚本中进行转换。

标签: php jquery ajax types boolean


【解决方案1】:

常规的帖子请求正文(从技术上讲,是x-www-form-urlencoded 消息)只不过是文本。偶数是文本。一切都是文本,因为最终这就是浏览器发送和服务器接收的内容:

Name=John%20Smith&Age=35&Subscribed=true

只需为真/假选择一个约定,并在您的服务器端代码中进行显式转换:

switch ($_POST['ref']) {
    case 'yeah':
        $ref = true;
        break;
    case 'nope':
        $ref = false;
        break;
    default:
        $ref = null;
}

如果您选择一个值集,PHP 将在 casting from string to boolean 时正确识别代码可以变得更简单:

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

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

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

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

【讨论】:

  • 非常感谢您的清晰解释!我最终选择发送 'yes/ 'no'string 值以避免在服务器端进行转换。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2018-08-26
    • 2014-03-30
    • 2019-02-10
    • 2021-05-11
    • 2018-05-03
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多