我有一个.php
脚本,如下所示:
$arr = array();
$arg1 = $_GET['arg1'];
$arg2 = $_GET['arg2'];
if ($arg1 !==1 && $arg2 !==0) {
$arr['msg'] = 'wrong values!';
header('Content-Type: application/json');
echo json_encode($arr);
exit();
}
$arr['msg'] = 'correct values!';
header('Content-Type: application/json');
echo json_encode($arr);
这是我的.js
文件:
$.ajax({
url : file.php,
type : 'GET',
data : {"arg1": 1, "arg2": 1},
dataType : 'JSON',
success : function (data) {
alert(data.msg);
}
});
正如我所期望的,在执行这些代码之后,它应该显示一个包含以下消息的警报:wrong values!
。但它不起作用,为什么?
注意1:如果我通过data : {"arg1": 1, "arg2": 0}
,它也将显示包含correct values!
的警报。现在我认为问题是.php
文件中的if
-语句。
注意2:以上代码已经运行良好。但现在我更新了我的Xampp,在更新后出现了问题。
或多或少只是把所有的注释放在一起:
- 而不是$arg1…&$arg2…使用逻辑或运算符
- _GET包含字符串(和数组)和!==首先检查数据类型,因此$_GET['fo']==1永远不会是真的
因为php的隐式类型杂耍可能会考虑等于0或1的值,而不是您所期望的值,所以我建议您保持严格的比较(==或!==)
你显然想检查一些数字,所以我加入了intval()并保持了严格的比较。但是您可以测试if ('1'!==$_GET['arg1'] || '0'!==$_GET['arg2'])
。
<?php
if ( !isset($_GET['arg1'], $_GET['arg2']) ) {
$response = [
'status'=>'error',
'msg'=>'missing parameter(s)'
];
}
else {
// you could add another test like http://docs.php.net/ctype_digit here first
$arg1 = intval($_GET['arg1']);
$arg2 = intval($_GET['arg2']);
if ( 1!==$arg1 || 0!==$arg2 ) {
$response = [
'status' => '...',
'msg' => 'wrong values!'
];
}
else {
$response = [
'status' => '...',
'msg' => 'correct values!'
];
}
}
header('Content-Type: application/json');
echo json_encode($arr);
---旁注---
我可以为这样的东西辩护
$arguments = [
intval($_GET['arg1']), // maybe even 'arg1'=>intval($_GET['arg1'])
intval($_GET['arg2'])
];
if ( array(1,0)!==$arguments ) {
但没有,我只是提了一下;-)
if语句指出arg1不得为1且arg2不得为0。当您传递arg1=1和arg2=1的数据时,该语句将不起作用。你的问题在if语句中。如果你想让If语句适用于每个条件,你应该使用或这样的语句||
if ($arg1 !==1 || $arg2 !==0) {//i made this condition *or* check this
$arr['msg'] = 'wrong values!';
header('Content-Type: application/json');
echo json_encode($arr);
exit();
}
您想要的是||(或),而不是&;(和),在您的条件中。正如目前所写的,只有两个值都不正确时,它才会返回错误。