首页 > 解决方案 > Javascript Ajax 在一个 PHP 页面中提交多个单独的表单(具有相同的表单结构)

问题描述

我有一个 PHP 页面,其中有 12 个带有单独表单 ID 的单独表单,以及单独的复选框、下拉列表等。像这张图片:

在此处输入图像描述

现在,表单有更新区,它主要是获取名称、是否启用检查、时间、Dim 并将其发送到 PHP 文件进行处理。

3 个区域的代码

因此,每个表单都有硬编码的 URL LoopInfo.php?id=1,其中 id 从 1 变为 12,因此 LoopInfo.php 知道单击了哪个区域的更新按钮并从该特定区域获取帖子变量

PHP 处理和更新 XML

$id = $_GET['id'];
        // echo "ID - ".$id.'<br>';
        if($id > 0 && $id < 13)
        {
            // ZName - 1-12
            // Zmode - 1-12
            // ZTime - 1-12
            // ZDim  - 1-12
            $radio = $_POST['radio'];
            if($radio == 1)
            {
                $radio = 0;
            }
            // echo "Radio - ".$radio.'<br>';
            $zn = "zname".$id;
            $znam = $_POST["$zn"];
            // echo "Name - ".$znam.'<br>';
            $et = "EnTim".$id;
            $entim = $_POST["$et"];
            // echo "Timer - ".$entim.'<br>';
            $ot = "OnTim".$id;
            $ontim = $_POST["$ot"];
            // echo "On Time - ".$ontim.'<br>';
            $oft = "OfTim".$id;
            $oftim = $_POST["$oft"];
            // echo "Off Time - ".$oftim.'<br>';
            $ed = "EnDim".$id;
            $endim = $_POST["$ed"];
            // echo "Dim - ".$endim.'<br>';
            $d = "Dim".$id;
            $dim = $_POST["$d"];
            // echo "Dim Per - ".$dim.'<br>';
            $bin = $radio.$endim."00000".$entim;
            // echo "Binary - ".$bin.'<br>';
            $loopval = bindec($bin);
            // echo "Loop Val - ".$loopval.'<br>';
            // print_r($_POST);
            // die;
            $hunza=simplexml_load_file('LoopInfo.xml');
            if($hunza)
            {
                $zmode='Z'.$id.'Mode';
                $hunza->$zmode=$loopval;
                if($znam == '')
                {
                }
                else
                {
                    $name='Zname'.$id;
                    $hunza->$name=$znam;
                }
                if($entim == 1)
                {
                    $ontime='Z'.$id.'TimeOn';
                    $hunza->$ontime=$ontim;
                    $oftime='Z'.$id.'TimeOff';
                    $hunza->$oftime=$oftim;
                }
                if($endim == 1)
                {
                    $dimval='Z'.$id.'Dim';
                    $hunza->$dimval=$dim;
                }
                $hunza->asXML('LoopInfo.xml');
                // echo "<script>console.log('File Updated' );</script>";
                header("Location: index.php");
            }
            else
            {
                echo "Error Loading File";
                echo "<script>console.log('Error Load File' );</script>";
            }
        }

所以基本上,每个都是一个表单,当按下更新区域时,获取所有表单数据,将其提供给 LoopInfo.php,LoopInfo.php 将这些值更新为相应标签中的 XML。

目标:我想要实现的是,有什么方法可以在不重新加载页面的情况下更新区域,即使用 Ajax Javascript。因此,Javascript 从表单中获取所有更新值,创建 Ajax 请求并发布到同一个 PHP 文件进行处理。我尝试用谷歌搜索“Javascript Ajax 多个表单在一个 PHP 中发送数据”,但没有结果。是否有可能获得一个通用函数,在调用时获取表单 ID 并了解这是 ID 1 并创建 URL LoopInfo.php?id=1 并将所有表单数据与此 URL 请求一起发送。

标签: javascriptphpjqueryhtmlajax

解决方案


问题是事件传播的原因。检查您的事件 - 是否是多次提交表单的原因。为了避开这个地方event.stopImmediatePropagation();


推荐阅读