空作为字符串发送“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;
当你这样做:
$.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'])
颇有几分天真的答案,但尝试做严格的类型检查。
if($var === null){
//do something
}
或者也许使用is_null来代替。
if (is_null($var)){
//do something
}
尝试了两种方法,但仍无法正常工作。 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问题。
你能表现出你如何测试它反对'null'之前设置'$ var'的例子吗?如果它是来自Ajax调用的请求参数,那么JS/jQuery中的参数设置如何? – nnnnnn 2012-08-14 00:18:20
在上面添加了一个示例@nnnnnn – TStu 2012-08-14 00:35:00