空作为字符串发送“null”

问题描述:

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

例如

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

已经取得的两个关键的变化是:从HTTP服务器 1.更改为从PHP版本HTTPS 2.更改,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; 
+2

你能表现出你如何测试它反对'null'之前设置'$ var'的例子吗?如果它是来自Ajax调用的请求参数,那么JS/jQuery中的参数设置如何? – nnnnnn 2012-08-14 00:18:20

+1

在上面添加了一个示例@nnnnnn – TStu 2012-08-14 00:35:00

当你这样做:

$.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']) 
+0

任何想法为什么这是在以前的主机上工作? – TStu 2012-08-14 00:38:31

+0

对于某些版本的PHP,“null”== null? – Eric 2012-08-14 00:38:59

+0

谢谢@Eric。 看起来像一个漫长的夜晚:\ \ – TStu 2012-08-14 00:46:34

颇有几分天真的答案,但尝试做严格的类型检查。

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

或者也许使用is_null来代替。

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

尝试了两种方法,但仍无法正常工作。 if($ var ==“null”){.... does not work – TStu 2012-08-14 00:21:55

如果不沿着编码JSON的线你的数据,你的领域将被发送作为字符串 - 这包括null如果评估对像if($myVar==null)$myVar,包含3个被发送的'null'当然ns 'null'它不是真正的零。

您可能还需要look at this问题。