You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中检测表单是否通过AJAX提交

嘿,我来帮你解决这两个问题——先搞定你的核心痛点:为什么PHP里的isset($_POST['login-btn'])一直返回false,再聊怎么判断请求是JavaScript发起的。

一、先解决表单提交后$_POST检测失败的问题

你的问题根源出在AJAX请求的请求头和数据格式不匹配:
你手动设置了Content-Type: application/x-www-form-urlencoded,但发送的却是FormData对象。FormData默认会让浏览器自动设置正确的请求头(带boundary参数的multipart/form-data),你手动覆盖的请求头会导致PHP无法正确解析POST数据,所以$_POST数组是空的,自然isset($_POST['login-btn'])永远返回false。

修复方法:
直接删掉JS里的这一行:

ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

让浏览器自动处理请求头,这样PHP就能正确解析FormData里的所有字段,包括你的login-btn按钮参数。

二、如何检测请求是JavaScript(AJAX)发起的

有两种常用且可靠的方法:

方法1:添加自定义请求头

在你的AJAX请求代码里,添加一行自定义请求头(这是行业通用的AJAX标识):

function ajaxFormSubmit() {
    'use strict';
    let ajaxRequest = new XMLHttpRequest();
    let url = 'admin login.php';
    let formData = new FormData(loginForm);

    // 添加AJAX标识请求头
    ajaxRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

    // 其余onload、onerror、open逻辑不变...
    ajaxRequest.send(formData);
}

然后在PHP里检测这个请求头:

// 判断是否为AJAX请求
$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';

// 结合表单提交判断
if($isAjax && isset($_POST['login-btn'])) {
    // 你的登录验证逻辑...
}

方法2:在FormData里添加隐藏标识

如果担心某些环境会屏蔽自定义请求头,可以在FormData里手动添加一个标识字段:

function ajaxFormSubmit() {
    'use strict';
    let ajaxRequest = new XMLHttpRequest();
    let url = 'admin login.php';
    let formData = new FormData(loginForm);
    // 添加AJAX标识字段
    formData.append('is_ajax', '1');

    // 其余逻辑不变...
    ajaxRequest.send(formData);
}

然后在PHP里检测这个字段:

if(isset($_POST['is_ajax']) && $_POST['is_ajax'] === '1' && isset($_POST['login-btn'])) {
    // 你的登录验证逻辑...
}

额外小建议

你现在在PHP里输出<script>alert(...)</script>,在AJAX响应里不会自动执行——因为AJAX返回的是纯字符串,浏览器不会主动解析执行其中的JS。建议返回纯文本或JSON格式的结果,然后在前端的onload回调里处理,比如:

// 替换echo JS代码的逻辑
if($row != null) {
    // 验证成功返回成功信息
    echo "登录成功";
} else {
    echo "用户名未注册";
}

前端直接用displayInfoMessage显示返回的文本即可,这样更符合AJAX的交互逻辑。

内容的提问来源于stack exchange,提问作者user7500403

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:02:49