如何从ajax调用一个php函数?

26

我熟悉如何使ajax调用php页面并执行一系列操作,然后返回json数据。但是是否可以调用给定页面中的特定函数?

基本上,我想要减少项目中文件的数量。因此,我可以将许多常用函数放在一个页面中,然后只调用我需要的函数。


可以的。只需在当前URL中添加一些标志以进行Ajax请求。例如,您当前的URL为?isAjax = 1,在脚本中检查该标志即可。 - Minesh Patel
是的,你可以这样做。你只需要注意参数,以便函数调用可以相互区分。在 PHP 中,你可以根据这些参数使用 switch case(不总是必需的)来区分函数。 - Alive to die - Anant
MVC模式会有所帮助,另一种方法是根据传递的URL参数调用函数。使用IF ELSE语句对参数进行判断并调用相应的函数。 - Danyal Sandeelo
您可以使用各种框架提供的路由方法。例如,Slim框架 - max
我已经构建了一个相当大的项目,没有使用后端框架,现在我想我应该使用一个。我认为当我完成大部分工作并有一些空闲时间时,我会将其转换过来。 - Josip Gòdly Zirdum
5个回答

31

对于 AJAX 请求

  1. 在你的网页中引入 jQuery 库。例如:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  • 点击按钮时调用一个函数

  • <button type="button" onclick="create()">Click Me</button>
    
  • 点击按钮时,在JavaScript中调用create函数。

  • <script>
        function create () {
            $.ajax({
                url:"test.php",    //the page containing php script
                type: "post",    //request type,
                dataType: 'json',
                data: {registration: "success", name: "xyz", email: "abc@gmail.com"},
                success:function(result){
                    console.log(result.abc);
                }
            });
        }
    </script>
    

    在服务器端的test.php文件中,应该读取动作POST参数,并对应值执行PHP动作,并以JSON格式返回,例如:

    $registration = $_POST['registration'];
    $name= $_POST['name'];
    $email= $_POST['email'];
    
    if ($registration == "success"){
        // some action goes here under php
        echo json_encode(array("abc"=>'successfuly registered'));
    }     
    

    11
    我困惑为什么他接受了你的答案。他要求从ajax调用特定的php函数,而你却调用了一个javascript函数。 - Rajat

    23

    您不能直接从AJAX请求调用PHP函数,但可以使用以下方法:

    <? php 
        function test($data){
            return $data+1;
        }
    
        if (isset($_POST['callFunc1'])) {
            echo test($_POST['callFunc1']);
        }
    ?>
    <script>
        $.ajax({
            url: 'myFunctions.php',
            type: 'post',
            data: { "callFunc1": "1"},
            success: function(response) { console.log(response); }
        });
    </script>
    

    4
    请注意这种方法,因为响应将包括全部内容,而不仅仅是回显该函数的结果。 - Professor Abronsius

    8

    作为这种目的的结构,我建议使用以下内容:

    PHP

    <?php
        if(isset($_POST['action'])){
            if ($_POST['action'] == "function1") { func1(); }
            if ($_POST['action'] == "function2") { func2(); }
            if ($_POST['action'] == "function3") { func3(); }
            if ($_POST['action'] == "function4") { func4(); }
        }
    
        function func1(){
            //Do something here
            echo 'test';
        }
    ?>
    

    jQuery

    var data = { action: 'function1' };
    
    $.post(ajaxUrl, data, function(response) {
        if(response != "") {
            $('#SomeElement').html(response);
        }else{
            alert('Error, Please try again.');
        }
    });
    

    如上所述,你无法直接从 AJAX 调用中调用 PHP 函数。

    3

    如果我理解正确的话,是的,你可以这样做。 将所有函数放在一个PHP文件中,并使用ajax作为参数传递要调用哪个函数。然后使用switch或if结构,执行你想要的函数。


    0

    jQuery:

    $(document).ready(function(){
        $('#tfa_1117700').change(function(){
            var inputValue = $(this).val();
            var v_token = "{{csrf_token()}}";
            $.post(
                "{{url('/each-child')}}",
                { dropdownValue: inputValue,_token:v_token },
                function(data){
                    console.log(data);
                    $('#each-child-html').html(data);
                }
            );
        });
    });
    

    PHP:

    public function EachChild(Request $request)
    {
        $html ="";
        for ($i=1; $i <= $request->dropdownValue; $i++)
        { 
            $html = $i;
        }
        echo $html;
    }
    

    3
    请尽量在回答中添加更多的上下文。问问自己:如果我没有完全阅读问题或误解了问题,这会产生什么影响? - Patryk Łucka

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接