0

我想知道是否有任何好的做法可以通过 Ajax 使用 Javascript 从 php 类调用方法。

这是我目前执行它的“风格”。

(类中的方法仅在这里举例)

PHP端:

<?php

if(isset($_POST['action']) && $_POST['action'] != null)
{
    extract($_POST);

    if($action)
    {
        $ajaxCommand = new EleveUpdate();

        if(method_exists($ajaxCommand, $action))
        {
            $reponse = call_user_func(array($ajaxCommand, $action),$_POST);
            echo $reponse;
            exit(0);
        }
        else 
        {
            throw new Exception("Cette méthode n'existe pas");
        }
    }
}
else
{
    echo 'Cette action n\'est pas autorisée';
    return false;
}

class EleveUpdate
{

    public function __construct()
    {

    }

    public function testfunct($data)
    {
        echo $data['eleve'];
    }
}

Javascript方面:

$(document).ready(function() {
    $.ajax({
        url: 'eleveupdate.php',
        type: 'POST',
        data: {
          action: "testfunct",
          eleve: 1
        },
        beforeSend: function()
        {
            loading(true);
        },
        error: function()
        {
            console.log('error');
        },
        success: function(data) 
        {
            loading(false);
            console.log(data);
        }
    });
});

问题是isset $_POST 总是在我的课堂上,我很确定这不是正确的方法,我在这里寻求帮助。

提前谢谢你

西蒙

4

1 回答 1

0

问题是基于字符串请求调用范围命名并不容易。您可以使用称为 LAMBDA 或匿名函数的东西。通过这种方式,您可以存储一个带有 LAMBDA 的字符串数组。像这样:

<?php
class EleveUpdate {
    private $funcs = array();

    function __construct($which_function) {
        $funcs['testfunct'] = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');

        $funcs[$which_function];
    }
}
?>

在此处查看更多信息:http ://www.php.net/manual/en/function.create-function.php

使用此方法,您甚至可能不再需要该类,而只是显示。

于 2013-02-17T23:10:23.590 回答