0

假设我有一个我想提交的表格。我已经建立了它和表格action=""。因此,我可以通过以下方式访问发布的数据if(isset($_POST['something']))

示例 form.php(代码未检查,只是为了说明点):

<?php
    $result = '';

    if (isset($_POST['something']) {
        $sql = 'SELECT * FROM aTable WHERE Name = :name';
    $stmt = $db->prepare($sql); 
    $stmt->execute(array(':name' => $_POST['something']);   
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    
    }
?>

<form action="" method="post">
    <input type="text" name="something" />
    <input type="submit" value="post" />
</form>

<div id="result">
    <pre>
    <?php echo $result; ?>
    </pre>
</div>

现在,如果用户启用了 js,我希望使用 jquery/js 处理表单。

我知道该怎么做。但是,我在访问数据库时遇到问题,例如在 2 个 php 文件中运行相同的查询。我的原始表单页面中的一个,当 js 关闭并返回关联的数据数组时使用。然后我有一个 ajaxData.php 它返回 json 但基本上是相同的 sql 查询。

示例 AJAXDATA.php

<?php
    $result = '';

    if (isset($_POST['something']) {
        $sql = 'SELECT * FROM aTable WHERE Name = :name';
    $stmt = $db->prepare($sql); 
    $stmt->execute(array(':name' => $_POST['something']);   
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    

    echo json_encode($result);
    }

?>      

在我看来,这是低效的,因为我正在编写相同的代码、相同的数据访问等......两次 - 一次用于 form.php,一次用于 ajaxdata.php。

我应该如何构建我的表单/文件,以便 ajax 使用与普通表单提交相同的数据库访问和 sql 代码?

4

1 回答 1

1

对于 html 更改
添加onSubmit事件以处理js启用/禁用

     <form action="" method="post" onSubmit="return process_ajax();">
       <input type="text" name="something" />
       <input type="submit" value="post" />
     </form>

precess_ajax()返回 false 以便不会提交表单,如果js禁用表单将被提交。所有参数必须与表单发布时相同。如果 post 是通过表单发送的,请发送一个额外的参数以在服务器AJAX端进行测试或ajaxFormAJAX

现在对于服务器端 PHP 代码检查额外的参数ajaxForm是否已设置或具有您在AJAX 发送JSON响应中发送的值,否则发送 HTML 页面。您的代码将如下所示

      if (isset($_POST['something']){
        $sql = 'SELECT * FROM aTable WHERE Name = :name';
        $stmt = $db->prepare($sql); 
        $stmt->execute(array(':name' => $_POST['something']);   
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    
        if(isset($_POST['ajaxForm'])){
          //send JSON response
        }
        else{
          //show html page here
        }   
      }

    ?> 
于 2013-01-02T05:53:29.777 回答