一个PHP文件处理所有的jQuery post请求?

3

我有很多jQuery AJAX方法,每个方法都对应一个小的PHP文件。
是否可能创建一个单一的PHP文件,在jQuery这一侧引用PHP文件中的特定函数呢?
可以像下面这样:

$.ajax({
    type: "POST",
    url: "functions.php", function01(),
    ....

下一个函数:
$.ajax({
    type: "POST",
    url: "functions.php", function02(),
    .... 

如果可能的话,这样做对整体性能来说可能是一个错误的做法吗?


这可以很容易地使用任何流行的PHP框架中的路由功能来完成。 - Patrick Q
非常感谢大家。我会看一下。问题已解决。 - qadenza
4个回答

5
你正在寻找将请求路由到正确接收者的方式。
这是许多MVC框架的常见做法,与代码可维护性相比,并没有显著的性能影响(-如果正确执行)。
以下是一个非常简单的示例:
<?php
// request.php
$allowedRequests = [
  // these files will correctly handle the specific requests when included
  'db'   => 'db.php',
  'file' => 'file.php'
];

$request = $_GET['request'];
if (isset($allowedRequests[$request)) {
  include($allowedRequests[$request]);
}

然后,在客户端上只需传递另一个GET参数:
$.ajax({
    type: "POST",
    url: "functions.php?request=db"

根据请求参数,选择正确的文件并进行包含。

注意:正如我所说,这只是一个非常简化的示例。例如,CakePHP支持将分组功能(=控制器)存储在不同的文件中。不管怎样,要点是将整个请求参数重定向到应用程序的正确部分。


@Rottingham 是的,测试性也是一个很好的观点!以一种抽象的方式处理请求,使得可以运行函数而不实际运行“真实”的URL,这是一个非常重要的概念。 - ComFreek

4
你可以这样做,但不是完全如此。
我建议在请求中发送一个参数,告诉它要运行哪个功能。
$.ajax({
    type: "POST",
    url: "functions.php",
    data: {
        method: 'function01'
        # and then whatever other data you send
    }
});

然后在你的PHP中,只需要使用method参数调用正确的函数。

<?php

$funcName = $_POST['method'];
call_user_func($funcName);

function function01(){
}

function function02(){
}

注意:您应该对 $_POST ['method'] 进行白名单检查,以确保您的页面安全。不想让任何人发送method=eval

@Diodeus:也许吧... >.> - gen_Eric
@Diodeus:我只是打字速度很快 :-D - gen_Eric

2
您可以将$_POST变量与其余AJAX数据一起传递,并使用它来确定要运行的函数,如下所示:
JS
$.ajax({
    type: 'POST',
    url: 'function.php',
    data: {
        action: 'function01',
        ... // Other Data
    }
    ...
});

PHP

if ($_POST['action'] == 'function01'){
    ...
}

我希望这可以帮到你!

1

您是正确的,事实上您应该尽量不用其他方法。考虑一个调度程序文件,它调用正确的函数。这样做有利于您,因为现在只需要定义一个错误处理程序、一个输出处理程序等等。

至于您的问题:将“data”添加到您的请求中,以便您可以识别请求类型。根据请求类型,您可以调用正确的方法(例如,使用switch语句评估$_POST值)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接