检查是否只设置了这个(一个)变量,$_GET也在ajax请求上使用POST类型执行


Check if only this (one) variable is set, $_GET executed also with POST type on ajax request

我有一个带有多个AJAX functions的脚本,它们调用同一个php_ajax.php文件。在php上,我通过检查设置了哪个$_GET$_POST vars来检查要执行哪个代码。

我有问题:

1) 我有一个function,它将变量$_GET['lang']传递给ajaxphp文件。另一个函数传递包括$_GET['lang']在内的三个变量。在这种情况下,php ajax文件上的两部分代码都被执行。这是因为我检查以这种方式执行什么代码:

//FIRST PART OF CODE
if(isset($_GET['lang']) && $_GET['lang'] != ''){
   //do stuff here
}
//SECOND PART OF CODE
if(isset($_POST['lang']) && isset($_POST['sub']) && isset($_POST['body'])){
   //do stuff here
}

我只想在设置了only $_GET['lang']的情况下执行第一部分。问题是,如果设置了包括$_GET['lng']在内的其他$var,这部分代码也将被执行。我知道我可以使用类似!isset($_GET['sub']的东西,但这不是一个通用的解决方案:仅适用于$sub。是否有一种通用的方法来检查是否只有isset($_GET['lang'])而没有其他内容?

2) 当我用POST调用AJAX请求时,为什么要执行代码的第一部分?这里的脚本:

$.ajax({
    url: 'ajax.php',
    cache: false,
    data: {lang: lang, sub: sub, body: area_body},
    type: 'POST',
    success: function(result){
                alert(result);
             },
    error: function(result){
                alert('Error.');
            },
});

这将执行两个代码,即使$_GET['lang'] shouldn't be设置为... the类型:"POST"。

谢谢!

在发布数据时,再添加一个参数来区分操作。

data: {lang: lang, sub: sub, body: area_body, type: 'add'},

在服务器端

if($_POST['type'] == 'add') {
     //your code
}
if($_POST['type'] == 'edit') {
     //your code
}

关于你的第一个问题,你可以这样做:

if (count($_GET) === 1 AND !empty($_GET['lang']))

对于第二个问题,试着在PHP页面上做一个print_r($_GET);

1)检查是否设置了$_GET['lang'],然后检查它是否是通过执行以下操作定义的唯一$_GETcount($_GET) == 1。例如:if(isset($_GET['lang']) && count($_GET) == 1){ ... }

2) 使用调试代码

echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>";

以检查是否声明了不需要的变量。