如何通过jQuery调用同一PHP文件内的多个函数获取目录文件数
你可以通过给请求携带标识参数的方式,让PHP端判断需要执行哪个函数,具体修改如下:
1 调整JS代码
jQuery的load()方法支持在URL后拼接查询参数,你只需要给每个请求带上要调用的函数标识即可:
function stats() { $('.result1').load("counter.php?action=a1"); $('.result2').load("counter.php?action=a2"); $('.result3').load("counter.php?action=a3"); }
小提示:你原代码中window.onload = stats()写法会立即执行函数,正确写法是window.onload = stats,如果已经能正常触发可以不用调整。
2 修改PHP代码
在PHP文件末尾增加参数接收和判断逻辑,收到对应action参数后执行指定函数即可,这里增加了白名单校验避免非法调用风险:
<?php function a1() { $i = 0; $dir = '../folder1/'; if ($handle = opendir($dir)) {while (($file = readdir($handle)) !== false){if (!in_array($file, array('.', '..')) && !is_dir($dir.$file)) $i++;}} echo "$i"; } function a2() { $i = 0; $dir = '../folder2/'; if ($handle = opendir($dir)) {while (($file = readdir($handle)) !== false){if (!in_array($file, array('.', '..')) && !is_dir($dir.$file)) $i++;}} echo "$i"; } function a3() { $i = 0; $dir = '../folder3/'; if ($handle = opendir($dir)) {while (($file = readdir($handle)) !== false){if (!in_array($file, array('.', '..')) && !is_dir($dir.$file)) $i++;}} echo "$i"; } // 新增参数处理逻辑 $allow_actions = ['a1', 'a2', 'a3']; $request_action = $_GET['action'] ?? ''; if (in_array($request_action, $allow_actions)) { $request_action(); } ?>
如果想要优化代码,还可以把三个功能重复的统计函数合并为一个,通过参数传递要统计的目录,进一步减少冗余代码。
内容的提问来源于stack exchange,提问作者tez
相关产品推荐
相关产品推荐

