我有一个带有多个AJAX functions
的脚本,它们调用同一个php_ajax.php
文件。在php
上,我通过检查设置了哪个$_GET
或$_POST vars
来检查要执行哪个代码。
我有问题:
1) 我有一个function
,它将变量$_GET['lang']
传递给ajax
php文件。另一个函数传递包括$_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']
,然后检查它是否是通过执行以下操作定义的唯一$_GET
:count($_GET) == 1
。例如:if(isset($_GET['lang']) && count($_GET) == 1){ ... }
。
2) 使用调试代码
echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>";
以检查是否声明了不需要的变量。