0

我想知道我是否可以模拟类似于 ASPX 如何与他们的表单系统一起工作的东西。当我单击一个按钮时,它会调用同一个页面,但不是重新加载整个页面,而是调用页面内的某个函数。例如,它可以调用一个函数,该函数将验证表单元素是否已填写。这在PHP中可能吗?我不知道如何提供一个例子,我很抱歉含糊不清......

4

6 回答 6

2

Ajax 是您的方法。PHP 是服务器端,因此根据定义,您必须前往服务器才能获得所需的内容。

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

于 2012-08-01T16:03:17.547 回答
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';
    }   
}
于 2012-08-01T16:03:06.770 回答
0

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

于 2012-08-01T16:05:44.470 回答
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);
}
于 2012-08-01T16:10:29.507 回答
-1

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

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

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

于 2012-08-01T16:04:19.697 回答
-2

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

即返回自我的链接:

siteurl/page.php?what_to_do=2

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

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

像这样的事情,没有写出整个程序来回答。

于 2012-08-01T16:04:25.940 回答