使用Ajax在同一个文件中调用PHP对象方法

时间:2012-11-30 15:11:42

标签: php javascript ajax singleton

我有一个PHP文件,... / datastuff.php 在此页面上实例化PHP对象。 (该类写在另一个文件中)。

public class MyClass{

        //....
       public function doAfterClick(){
        //.....
       }
}

所以在datastuff.php我做

$MyObject = new MyClass();
 //user specific data is added to $MyObject

现在,当用户按下datastuff.php上的按钮时,我想调用$ MyObject-> doAfterClick()

我认为AJAX是此类问题的通用解决方案。但我不知道该怎么做? 如果我想调用另一个页面上编写的PHP函数,我可以使用AJAX将数据发送到该页面。但是我想留在这个页面上,因为MyObject需要调用该方法。

如果我回到datastuff.php会不会丢失$ MyObject? 如果我将其设为Singleton或Global,那么这会起作用吗? 我看着这个,这是一个类似的问题,我不是我想要的: Using JQuery ajax to call a PHP file, process, but stay on same page

1 个答案:

答案 0 :(得分:3)

这是基本想法:

# datastuff.php

// This object will be created upon each request
$MyObject = new MyClass();

$action = (array_key_exists('action', $_GET)) ? $_GET['action'] : '';
switch ($action) {
    case 'do_something':
        $response = $MyObject->doAfterClick();
        // Output relevant feedback to the user or redirect them somewhere based on the response

        // This was most likely called via AJAX, so perhaps output JSON data or
        // some other means of communicating the response back to the javascript
        break;

    case 'do_something_else':
        // etc...
        break;

    default:

        // Present the information to the user...

        break;
}

您的$MyObject将在每次请求时创建(即在初始页面加载时以及单击按钮并触发AJAX请求之后),但假设已获得相同的数据,则每个请求中的{{1}}可能相同。单击按钮后,对“datastuff.php?action = do_something”的ajax请求将确保调用相关方法。

虽然这样的事情会起作用,但这不是好的代码设计。我建议你花些时间研究MVC(模型,视图,控制器)模式。