[英]How to find out if a request is an ajax request?
我试图找出ajax是否发送了对PHP文件的请求。
我用Google搜索并阅读了一大堆提示以下方法的文章:
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
echo 'This is an ajax request!';
exit;
}
echo 'This is not an ajax request!';
但我的服务器没有这个变量: Undefined index: HTTP_X_REQUESTED_WITH ...
多数民众赞成我如何制作ajax请求:
$.ajax({
url: 'http://URL/test.php',
complete: function(res) {
console.log(res.responseText);
}
});
我正在从另一个网址拨打电话,所以我设置了header('Access-Control-Allow-Origin: *');
我在$_SERVER
发现了一个区别:
Ajax请求: $_SERVER[HTTP_ACCEPT] => */*
没有Ajax请求: $_SERVER[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
所以我的问题是,有没有办法让HTTP_X_REQUESTED_WITH
进入$_SERVER
? 如果没有,是否有正确的方法通过使用$_SERVER[HTTP_ACCEPT]
来确定请求是否为AJAX
没有100%的方法来检测请求是否是通过ajax进行的。 即使有人发送标题为“X-Requested-With:XMLHttpRequest”,你也不应该依赖它。
您可以做的是提供您自己定义的变量,并使用命令设计模式来测试结果,例如:
$.ajax({
url: 'http://URL/test.php',
data: {action: "ajax_request"},
complete: function(res) {
console.log(res.responseText);
}
});
和PHP测试:
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch ($action) {
case 'ajax_request' : echo 'This is an ajax request!';
break;
}
}
else
echo 'This is not an ajax request!';
试试这个
while(true)
{
......
if (window.XMLHttpRequest){
echo 'This is an ajax request!';
return new XMLHttpRequest();
}
else if(window.ActiveXObject)// for internet explorer
{
echo 'This is an ajax request'!;
return new ActiveXObject("Microsoft.XMLHTTP");
}
else
echo 'This is not an ajax request!';
}
并非所有浏览器都会发送我通常使用的响应
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {//Do stuff }
并为ajax
request = $.ajax({
url: SomePage.php,
type: "POST",
data: {key: value}
});
request.done(function(returnedData) {
//do done stuff
});
request.fail(function(jqXHR, textStatus) {
//do fail stuff
});
注意:
$HTTP_SERVER_VARS contains the same initial information, but is not a superglobal.
(Note that $HTTP_SERVER_VARS and $_SERVER are different variables and that
PHP handles them as such). Also note that long arrays were removed since PHP 5.4.0 so
$HTTP_SERVER_VARS doesn't exist anymore.
所以var_dump($HTTP_SERVER_VARS);
要查看它是否包含在那里,还要注意$_SERVER
是由网络服务器填写的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.