【问题标题】:Null being sent as a string "null"Null 作为字符串“null”发送
【发布时间】:2012-08-10 06:11:08
【问题描述】:

我们最近移动了服务器,并注意到一些奇怪的问题。 我们注意到的主要问题是在 php 中执行空值检查的任何变量都被解释为字符串。

例如

    if($var == null){
        //do something
    }

已进行的两个关键更改是: 1.从HTTP服务器改为HTTPS 2. php版本从5.3.14改为5.3.13

请求是使用 jQuery.ajax 后调用发出的。

我的问题是,是否有任何已知的问题/原因会发生这种情况(例如上面的更改),是否可以采取任何措施来解决问题(只需进行最小的更改)。

一如既往地感谢您的回复!

编辑: 示例

Js/jQuery

    var test = null;
    $.ajax({
        url: 'functions.php',
        data: { action: 'testNullFunction', testVar:test },
        type: 'post',
        success:
        function (output) {
            alert(output)
        }})

PHP:

    if (isset($_POST['action']) && !empty($_POST['action'])) {
         $action = $_POST['action'];
         switch ($action) {
             case 'testNullFunction':
                 if ($_POST['testVar']==null || is_null($_POST['testVar'])){
                       echo "its null"; 
                } 
             break;

【问题讨论】:

  • 您能否举例说明在针对null 进行测试之前如何设置$var?如果它是来自 Ajax 调用的请求参数,那么在 JS/jQuery 中如何设置参数?
  • 在@nnnnnn 上面添加了一个示例

标签: php jquery ajax post https


【解决方案1】:

当你这样做时:

$.ajax({
    url: 'functions.php',
    data: { action: 'testNullFunction', testVar:test },
    type: 'post',
    success: function (output) {
        alert(output)
    }
})

您将data 作为字符串发送,因此所有值也都变为字符串。

当 PHP 接收到它时,它仍然是一个字符串。在这种情况下,PHP 无法确定 testVar 是否包含 null"null" - 类型信息已丢失。


你可以通过发送来解决这个问题:

data: { action: 'testNullFunction', testVar: JSON.stringify(test) }

并接收:

$testVar = json_decode($_POST['testVar'])

【讨论】:

  • "null" == null 对于某些 PHP 版本?
  • 谢谢@Eric。看起来像一个漫长的夜晚:\
  • 感谢您的解决方案。顺便说一句,JavaScript 中 JSON 编码的函数是 JSON.stringify
【解决方案2】:

有点幼稚的答案,但请尝试进行严格的类型检查。

if($var === null){
    //do something
}

或者也许使用 is_null 代替。

if (is_null($var)){
    //do something
}

【讨论】:

    【解决方案3】:

    如果您没有按照 JSON 行对数据进行编码,您的字段将作为字符串发送 - 这包括以 'null' 发送的 null,当然,如果您评估类似 if($myVar==null)$myVar 包含 'null' 它并不是真正的 null。

    您可能还想look at this 提问。

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 2012-01-16
      • 2014-04-09
      • 2018-10-21
      • 2012-01-11
      • 2021-04-04
      相关资源
      最近更新 更多