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

时间:2013-08-21 12:07:40

标签: php jquery ajax

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

我有问题:

1)我有一个function传递给ajax php文件变量$_GET['lang']。另一个函数传递三个变量,包括$_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
}

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

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

$.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'`。

谢谢!

3 个答案:

答案 0 :(得分:2)

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

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

在服务器端

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

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

答案 1 :(得分:1)

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

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

对于第二个问题,请尝试在PHP页面上执行print_r($_GET);

答案 2 :(得分:0)

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

2)使用

调试代码

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

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