表单数据处理PHP通过AJAX在与<form>相同的文件中调用?

时间:2016-06-30 10:24:13

标签: javascript php html ajax

当您使用HTML表单时,我学会了它的优雅&#39;处理同一文件中的数据,例如。 <?php if isset($_POST['submit'] doSomething(); ?> ... <form action="" method="POST">

但是如果我想通过ajax发送数据怎么办?我是否将doSomething()放在我发送数据的单独的php文件中,或者我是否应该在实际网站内容开始之前将它放在同一个文件中并且只是exit()(如果它已被调用) by ajax)?我认为这样可以让网站在禁用JS时也更容易。

我知道这两种方式都有效,但我想知道什么更干净,并且会减少错误。

以下是解释我的意思的示例代码:

/* example.php */
<?php
if( isset( $_POST['submit'] ) ) {
    doSomething( $_POST['foo'] );
    if( !isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
        exit();
    }
}
?>
<html>
    <head>
    ...
    </head>
    <body>
        <form action="" method="POST">
            <input type="text" name="foo" id="foo">
            <input type="submit" name="submit">
        </form>
    <script type='text/javascript'>
    $('form').submit( function( event ) {

        event.preventDefault();

        $.post( 'example.php', { submit: '', foo: $('#foo').val() } );

    } );
    </script>
    </body>
</html>

这是一种良好且可维护的方法吗?

2 个答案:

答案 0 :(得分:0)

是的,因为你已经说过两种选择都有效。但最佳做法是将seprate文件用于AJAX调用,它们被称为Web服务/ API。

它们是为完成某些特定任务而制作的。

因此,为AJAX请求创建新文件,并从该文件执行单个特定任务,并将适当的数据作为JSON / HTML返回。

通过这种方式,您可以将主文件的逻辑和格式逻辑分开,并且在主 PHP 文件中不会出现混乱。

答案 1 :(得分:0)

  

当您使用HTML表单时,我学会了它的优雅&#39;处理同一文件中的数据

不是真的。在同一网址上处理数据是一个好主意。

这样做的主要优点是,当用户提交错误数据时,它允许您再次轻松显示表单,预先填充上次尝试的数据,以及其他错误消息。

将所有内容放在一个文件中并不是一个好主意。拆分通常会更好。例如:

include("process_form_data.php");
include("form.php");
include("result.php");

$errors = array();

if ($_POST['submit']) {
    $errors = process_form_data();
    if (count($errors)) {
         show_form();
    } else {
         show_result();
    }
} else {
    show_form();
}

这通常通过使用类似的MVC框架来简化。

  

但是如果我想通过ajax发送数据怎么办?

然后重要的是。您永远不需要显示整个表单以响应Ajax请求。响应更可能是$errors的JSON转储或结果信息。

由于逻辑存储在包含文件中,您可以将其放在单独的URL上,并且仍然可以轻松访问所有共享逻辑。

也就是说,使用相同的URL并添加if/else的附加位以基于Accept标头执行不同的操作会更加RESTful(即测试以查看JSON是否为首选HTML作为回应。)