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

调用AJAX请求PHP接口出现404错误,求解决方案

解决Slim框架中AJAX调用GET 404错误的方案

嘿,这个404问题我之前开发Slim应用时也碰到过,咱们一步步排查解决:

1. 先确认路由与请求路径的匹配问题

你遇到的404本质是Slim的路由没有匹配到你的AJAX请求路径。看你的代码:

  • Slim路由定义的是/checker,但AJAX请求的URL是api/checker,浏览器实际请求的是http://localhost/v5/api/checker,两者路径不匹配。

解决办法:

方法一:设置Slim的基础路径

如果你的Slim入口文件(比如index.php)放在/v5/api/目录下,需要在初始化Slim应用时设置基础路径,让路由从这个路径开始匹配:

// 初始化Slim应用时添加这行
$app = Slim\AppFactory::create();
$app->setBasePath('/v5/api');

这样Slim的/checker路由就会对应http://localhost/v5/api/checker,和你的AJAX请求路径完全一致。

方法二:调整AJAX的请求URL为绝对路径

如果不想修改Slim配置,直接把AJAX的URL改成绝对路径,避免相对路径的歧义:

function CallChecker() { 
    $.ajax({ 
        type: 'GET', 
        url: '/v5/api/checker', // 改用绝对路径
        dataType: 'json', 
        success: function(data) { 
            console.log(data); // 用console.log查看结果比alert更直观
        },
        error: function(xhr, status, error) {
            console.error('请求错误详情:', status, error); // 增加错误日志,方便排查
        }
    }); 
}

2. 检查服务器的重写规则配置

Slim是单入口框架,需要服务器把所有请求转发到入口文件(index.php),否则静态文件路由会直接返回404。

Apache配置(.htaccess)

确保在/v5/api/目录下的.htaccess有如下内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

Nginx配置

在Nginx的站点配置中添加:

location /v5/api {
    try_files $uri $uri/ /v5/api/index.php?$args;
}

3. 修复PHP代码的响应格式问题

就算路由匹配成功,你当前的PHP代码也会导致AJAX解析错误:

  • 你直接echo $result返回的是纯文本,但AJAX指定了dataType: 'json',会触发解析失败。
  • 另外,exec命令存在命令注入风险,要对$host做转义处理。

修改后的PHP代码:

$app->get('/checker', function ($request, $response) { 
    // 用绝对路径指定data.json,避免相对路径找不到文件
    $jsonPath = __DIR__ . '/data/data.json';
    $jsonContents = file_get_contents($jsonPath); 
    $data = json_decode($jsonContents, true); 

    $checkResults = [];
    foreach ($data as $item) { 
        $host = $item['domain']; 
        // 用escapeshellarg转义主机名,防止命令注入
        exec('ping -c 2 ' . escapeshellarg($host), $output, $result); 
        $checkResults[$host] = $result === 0 ? '在线' : '离线'; // 把结果转成易读的状态
    } 

    // 返回标准JSON响应
    return $response->withJson($checkResults); 
});

4. 验证文件路径是否正确

确保data/data.json文件确实存在于Slim入口文件的同级目录下,或者用绝对路径(比如__DIR__ . '/data/data.json')来指定,避免因相对路径导致文件找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:01:43