从按钮动态触发PHP中的回调?

时间:2012-08-01 16:01:17

标签: php dynamic-websites dynamic-web-controls

我想知道我是否可以模仿类似于ASPX如何使用其表单系统的东西。当我单击一个按钮时,它调用相同的页面,而不是重新加载整个页面,它调用页面内的某个功能。例如,它可以调用一个函数,在其中验证表单元素是否已填写。这可能在PHP?我不知道如何提供这方面的例子,我很抱歉模糊不清......

6 个答案:

答案 0 :(得分:2)

Ajax是你的方法。 PHP是服务器端,因此根据定义,您必须转到服务器以获得所需的内容。

如果你真的是Ajax-phobic,XAJAX将允许你直接调用PHP函数而不需要大量类似Ajax的javascript代码。但是,它并不是系统记录最多的系统。

答案 1 :(得分:1)

是否需要进行PHP调用? 您可以通过简单的Javascript或通过AJAX调用来实现这一目标。

编辑:通过AJAX添加了PHP函数调用的示例。 (使用jQuery)

以下是一个例子:

<?php
if(isset($_POST['functionToCall'])) 
{
    $args = $_POST;
    array_shift($args);
    call_user_func($_POST['functionToCall'], $args);
} else {
?>  
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    </head>
    <body>
        <form id="myForm">
            <input id="mytext" type="text" value="some value"/>
            <input type="submit"/>
        </form>
        <button id="callBTN">Call Validation</button>
        <div id="result"></div>
        <script>
        $(document).ready(function()
        {
            $('#callBTN').click(function()
            {
                //Values to pass (validate)
                var inputVal = $('#mytext').val();

                // Function to call in the PHP Side
                var functionName = 'myFunctionCall';

                //Form validation with pure JS+jquery (without calling PHP)
                /*
                if( !inputVal)
                {
                    alert('text is empty');
                } else {
                    alert('text is not empty');
                }
                */

                //Form Validation by calling a PHP function through AJAX
                var selfURL = document.URL; //An example of calling itself
                $.post(selfURL, {"functionToCall": functionName, "mytext": inputVal}, function(data) {
                    $('#result').html(data);
                });
            });
        });
        </script>
    </body>
</html>
<?php
}
function myFunctionCall($args)
{
    if(!empty($_POST['mytext']))
    {
        print 'The text submited was -> ' . $_POST['mytext'];
    } else {
        print 'There was no text submitted';
    }   
}

答案 2 :(得分:0)

PHP中没有回调。您必须使用前端技术来组织和处理您的活动。 要与后端通信,请使用AJAX。 (发布/获取不同的php页面)

答案 3 :(得分:0)

可能看起来像这样,假设您将使用jQuery

<script>
   $('#form).submit(function(e){
      e.preventDefault();
      $.post($(this).attr('action'), $(this).serialize(), function(data){
          // in data you'll have response from server, preferably JSON
      }
   });
</script>
<form action="form/handler.php" method="post" id="form">
    <input type="text" name="name" value="" />
    <input type="submit" />
</form>

form/handler.php

if(isset($_POST['name)){
    // implement any logic you want and construct JSON response you need
    $response = array('name' => $_POST['name']);
    echo json_encode($response);
}

答案 4 :(得分:-1)

通过在客户端上利用“模型,视图,控制器”设计模式和AJAX,这只能在PHP概念上实现(即您可以模拟有状态行为)。

PHP以“无状态”方式运行,这意味着每次有Web请求时,PHP都会执行其操作并在发送响应时完全“消失”。如果您正确构建了一个MVC应用程序,您可以将Web请求高度集中到应用程序中的给定方法,然后使用AJAX在实际允许表单“提交”之前使用表单内容调用该方法。

我说“概念上”,但请注意,这是大型现代网络应用中的常见和推荐做法。我这样说的原因是,就PHP而言,你仍在使用“完整”的Web请求(该按钮不会“调用”PHP函数,而不是常规网页刷新)。但是,对于MVC等体系结构,您可以将每个页面加载转换为方法调用。

答案 5 :(得分:-2)

您可以通过get传递参数来控制调用哪些代码块。

即。一个回到自我的链接:

siteurl/page.php?what_to_do=2

然后在顶部的一些控制代码:

if($_GET['what_to_do']==1)
{
    showMain();
}
elseif($_GET['what_to_do']==2)
{
    showSpecial();
}

类似的东西没有写出整个程序来回答。