【问题标题】:Degradeable jquery ajax forms with PHP - Code Repetition使用 PHP 的可降解 jquery ajax 表单 - 代码重复
【发布时间】:2013-01-01 20:13:33
【问题描述】:

假设我有一个想要提交的表单。我已经构建了它和表单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 代码?

【问题讨论】:

    标签: php jquery ajax pdo graceful-degradation


    【解决方案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 被禁用,表单将被提交。所有参数必须与表单发布时相同。 在AJAX 中发送一个额外的参数,比如ajaxForm 以在服务器端测试帖子是通过表单还是AJAX

    现在用于服务器端 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
            }   
          }
    
        ?> 
    

    【讨论】:

      猜你喜欢
      • 2014-07-08
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      相关资源
      最近更新 更多