繁体   English   中英

为什么ajax响应不起作用?

[英]Why ajax response doesn't work?

我有一个.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!的警报correct values! 也一样 现在我认为问题在于.php文件中的if -statement。

注意2:上面的代码已经可以正常工作了。 但是现在我更新了Xampp,并且在更新后发生了该问题。

您的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();
}

或多或少地将所有评论放在一起:

  • 代替$ arg1 ... && $ arg2 ...使用逻辑或运算符
  • _GET包含字符串(和数组),并且!==首先检查数据类型,因此$ _GET ['foo']!== 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 ) {

....但不,我只是提到它;-)

您要|| (或),而不是&&(and),请视您的条件而定。 如当前所写,只有两个值都不正确时,它才会返回错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM