我有很多jquery ajax方法,每个方法都有一个小的php文件
是否有可能创建一个单独的php文件,而不是在jquery方面引用php文件中的特定函数?
像这样:
$.ajax({
type: "POST",
url: "functions.php", function01(),
....
下一个功能:
$.ajax({
type: "POST",
url: "functions.php", function02(),
....
如果有可能的话 - 整体表现可能是错误的做法吗?
答案 0 :(得分: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支持在不同文件中存储分组功能(=控制器)。无论如何,要点是将整个请求参数重定向到应用程序的正确部分。
答案 1 :(得分:4)
你可以,但不太喜欢。
我建议在请求中发送一个参数,告诉它要运行什么函数。
$.ajax({
type: "POST",
url: "functions.php",
data: {
method: 'function01'
# and then whatever other data you send
}
});
然后在PHP中,只需使用method
param调用正确的函数。
<?php
$funcName = $_POST['method'];
call_user_func($funcName);
function function01(){
}
function function02(){
}
注意:您应该针对白名单检查$_POST['method']
,以确保您的网页安全。不希望有人发送method=eval
。
答案 2 :(得分:2)
您可以传递$ _POST var以及其余的AJAX数据,并使用它来确定要运行的函数:
<强> JS 强>
$.ajax({
type: 'POST',
url: 'function.php',
data: {
action: 'function01',
... // Other Data
}
...
});
<强> PHP 强>
if ($_POST['action'] == 'function01'){
...
}
我希望这有帮助!
答案 3 :(得分:1)
你的权利,事实上你应该尽量不以另一种方式去做。想一下调用正确函数的1个调度程序文件。你自己帮个忙,因为你现在只能定义1个错误处理程序,1个输出处理程序etcetc。
至于您的问题:在请求中添加“数据”,以便您可以识别请求的类型。根据请求的类型,您可以调用正确的方法(例如,使用开关来评估$ _POST值)