在PHP中检测 AJAX

44u64gxh  于 2023-09-29  发布在  PHP
关注(0)|答案(5)|浏览(130)

我试图使一个 AJAX 后同一php页面。
AJAX :

$("#loginForm").submit(function(e) {
    e.preventDefault();
    var postData = $(this).serialize();
    $.post("login.php", postData);
});

postData正确,格式如下:

username=john&password=123123

PHP(同页):

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
      echo 'Ajax Request Detected';
}

然而,这个if-check总是返回false,并且回显行永远不会执行。我做错了什么?

w8ntj3qf

w8ntj3qf1#

这是在php中检测 AJAX 请求的正确方法:

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') {
    // this is ajax request, do something
}
mo49yndu

mo49yndu2#

我建议使用GET参数来识别 AJAX 请求。$_SERVER依赖于Web服务器和JavaScript框架。
->将您的URL更改为login.php?在使用AJAX时, AJAX =1。

cwdobuhd

cwdobuhd3#

您正在搜索的标头名为“X-Requested-With”(值XMLHttpRequest),无法使用$_SERVER ['HTTP_X_REQUESTED_WITH']检索。
您可以通过对$_SERVER变量使用var_dump自己找到它。或者,您也可以使用浏览器查找发送的标头。
获取脚本中的请求头,可以使用getallheaders函数完成。
http://us3.php.net/manual/en/function.getallheaders.php

a0x5cqrl

a0x5cqrl4#

在vanilla JavaScript中,您需要将以下内容添加到您 AJAX :

xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

我不知道它是如何在jQuery中完成的,但它应该是可行的。

vmpqdwk3

vmpqdwk35#

我尝试了所有建议的答案,但对我有效的是使用下面的代码

if (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false) {
  //this request expects json
  die('json expectd');
}
die('non json');

我目前使用axios没有修改任何头设置。
根据你的JavaScript包的不同,你可能需要在头文件中定义ACCEPT,这样才能对你有效。
但是对于大多数 AJAX 包,默认情况下这总是存在的,并且它工作得很好。

相关问题