Null以字符串“null”发送

时间:2012-08-14 00:14:56

标签: php jquery ajax post https

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

e.g。

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

已经做出的两个主要变化是: 1.从HTTP服务器更改为HTTPS 2.从php版本5.3.14更改为5.3.13

请求是使用jQuery.ajax post call。

我的问题是,是否存在任何已知的问题/原因(例如上述更改),并且可以采取任何措施来解决问题(只需进行少量更改)。

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

编辑: 示例

JS / jQuery的

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

腓:

    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;

3 个答案:

答案 0 :(得分:4)

当你这样做时:

$.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.encode(test) }

接收:

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

答案 1 :(得分:2)

有些天真的答案,但尝试进行严格的类型检查。

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

或者也许使用is_null。

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

答案 2 :(得分:2)

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

您可能还想look at this提问。