PHP OOP和AJAX:如何在类中处理服务器端?
我正在努力将我的标准PHP项目转换为OOP,但我遇到了一道关于如何使用PHP类处理AJAX调用的难题。我对我现在这样做不满意。我有一个TillAjax.php文件,我通过AJAX调用从我的TillUI.php文件调用它 在TillAjax.php文件中,我这样做是为了获得从ajax调用传递的信息PHP OOP和AJAX:如何在类中处理服务器端?,php,ajax,Php,Ajax,我正在努力将我的标准PHP项目转换为OOP,但我遇到了一道关于如何使用PHP类处理AJAX调用的难题。我对我现在这样做不满意。我有一个TillAjax.php文件,我通过AJAX调用从我的TillUI.php文件调用它 在TillAjax.php文件中,我这样做是为了获得从ajax调用传递的信息 $till = new Till(); if(isset($_POST['data'])) $till->doStuff($_POST['data']); 我认为这会破坏OOP 我使用过
$till = new Till();
if(isset($_POST['data']))
$till->doStuff($_POST['data']);
我认为这会破坏OOP
我使用过ASP.NET MVC,在这里可以调用控制器中的特定操作,而无需检查post值。因此,我想知道是否有更聪明的PHP方法来解决上述问题?我使用的方法是使用Ajax类 您的php文件调用Ajax::Process($\u GET['handle']),其中'handle'包含静态类方法的名称,因此可能是'Till::Process'。Ajax类根据允许的函数列表检查函数(即允许通过Ajax调用的函数),然后使用
call\u user\u func\u array
调用函数(我的代码使用$\u POST的内容作为参数传递给函数)。该函数的返回将自动编码为json并输出到客户端
这意味着您的目标php文件如下所示:
<?php
//File: ajax.php
include ("Ajax.php");
Ajax::Process($_GET['handle']);
?>
所以现在result包含从php方法返回的所有数据,直到::Process。您是否考虑过使用php MVC框架,如、、等?它们将允许您将请求路由到特定的控制器方法。如果您可以选择迁移到其中一个框架,那么这将是一个更干净的解决方案。+1因此,对于带有验证的简单输入表单,您不需要创建两个函数,即返回结果的validate()和响应结果的validateAjax?您可以只回显Ajax::validate返回的内容,对吗?是的,尽管我使用它的方式是从Ajax函数而不是HTML输出JSON。显然,您可以调用一个输出HTML的函数,并在AJAX调用完成时显示它('ajax.php?handle=class->method'…?客户端javascript显然不知道要在其上调用此非静态方法的实例。因此您可以这样做,但服务器代码在看到->运算符而不是::,时需要创建类的新实例。
$.get('ajax.php?handle=Till::Process', {}, function(result) {
//called on page response
});