Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP OOP和AJAX:如何在类中处理服务器端?_Php_Ajax - Fatal编程技术网

PHP OOP和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 我使用过

我正在努力将我的标准PHP项目转换为OOP,但我遇到了一道关于如何使用PHP类处理AJAX调用的难题。我对我现在这样做不满意。我有一个TillAjax.php文件,我通过AJAX调用从我的TillUI.php文件调用它

在TillAjax.php文件中,我这样做是为了获得从ajax调用传递的信息

$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
});