根据ajax搜索答案自动填写表单并提交

Auto filling a form and submitting based on a ajax search answer

本文关键字:表单 提交 ajax 搜索 答案 根据      更新时间:2024-03-27

这个问题已经让我沮丧了几天,由于我在这里为我的项目中的其他问题找到了一些帮助,似乎有人可以提供我忽略的见解。

我承认我对sql、javascript、jquery、ajax、css和php非常陌生。我在大学里学了3年计算机科学(15年前)。虽然编码和逻辑没有太大变化,但它的语法和握手,以及计算发生在哪里,我要么忘记了,要么忽略了,要么一无所知。

我已经完成了一个基于ajax的搜索提交。此搜索在标记为.Admin的div中显示目标php这个效果很好。

它的答案是显示一棵树以及搜索节点上方和下方的节点。

我想让树中的每个节点都成为一个可点击的链接,指向它自己节点的搜索结果。

在php结果中,我将其编码为在对javascript函数的html调用中编写,它为每个函数生成一个唯一的id,以及它自己的函数调用。(不管这是否是个好主意,这就是我所尝试的)我认为,让javascript使用它知道的信息填写带有创建链接的表单并重新提交是很容易的,因为再次搜索不需要刷新。我试着让php编写这个脚本,以便它与页面一起开发,我也试着编写脚本并将其包含在父页面中,以便它已经加载。。。我不确定它应该放在哪里,也不知道它应该怎么写。

我可能错过了一个不可或缺的部分,或者我试图对代码做比我应该做的更多的事情,或者没有完全掌握操作发生的地方,需要完全重新思考。

我会尽量包括所有相关的代码,如果还不够,我会很高兴地补充。提前谢谢。

CallSearch.js

    $(document).ready(function() {
        $('#Search').submit(function(event) {
            $.ajax({
                type        : 'POST', 
                url         : 'MenuSearch.php',
                data        : $( this ).serialize()
            })
            .done(function(results) {
                $(".Admin").html(results);
            });
        event.preventDefault();
        }); 
    });

Menu.php(我的搜索表单所在的位置)

    <script src="/JS/CallSearch.js"></script>
     ...
    <li><a>Search</a> <input type= "text" name="Search" id="search_name" class="search-group">
                <ul>
                    <li><input type="radio" name="Table"  id="TableRegion" value="R" class="search-group" checked><label for="TableRegion">Region</label></li>
                    <li><input type="radio" name="Table"  id="TableGrape" value="G" class="search-group"><label for="TableGrape">Grape</label></li>
                    <li><input type="radio" name="Table"  id="TableWine" value="W" class="search-group"><label for="TableWine">Wine</label></li>
                    <li><button type="submit" id="SubmitSearch">Submit</button></li>
                </ul>
            </li>
        </form>
    ...

菜单搜索.php

    define('DB_SERVER', 'localhost');
    define('DB_USERNAME', 'Webpage');
    define('DB_PASSWORD', 'Guest');
    define('DB_DATABASE', 'database');
    $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
    ...
    $sqlp ="SELECT * FROM region a JOIN Regionclosure b ON a.idregion=b.parent WHERE b.child= $idReg ORDER BY b.Depth DESC;";
    ...
    $resultp = mysqli_query($db, $sqlp);
            $string ="";
            while($row = mysqli_fetch_assoc($resultp)){
                $Reg = $row["RegName"];
                $Parent= $row["Parent"];
                echo $string . "|___";
                if($_SESSION["Level"] == 'A' or $_SESSION["Level"] == 'C') 
                    echo $Parent . " - ";
                echo  "<a href='#' id='$Reg'>" . $Reg . "</a><br>";
                echo "
                    <Script>
                        $('#$Reg').click(function(){ searchforReg('$Reg'); return false; });
                    </script>";
                $string .= "&nbsp;&nbsp;&nbsp;";
            };

我尝试过多次迭代"searchforReg('$Reg')"函数;但都没有用……我觉得它应该是这样的:

    function "searchforReg(Region){
    SearchData= "Table=R&Search="+$(Region).val;
    (function() {
        $.ajax({
            type        : 'POST', 
            url         : 'MenuSearch.php',
            data        :  SearchData
        })
        .done(function(results) {
            $(".Admin").html(results);
        });
    event.preventDefault();
        });
    });

然而,这导致激活"操作"搜索无法将答案发送到并打开php(没有CSS…喘息…这不太好)。我觉得一个简单的javascript应该能够处理它,但我尝试了我能想到的所有不同方法(或查找),使其工作,但都无济于事。

我意识到我在玩"深水区",我在我的"水翼",所以如果你能宽恕我,把我推向边缘,我会很感激的。

首先,为每个链接打印点击处理程序的过程过于繁琐。相反,只需给每个链接一个类,并为该类的任何链接设置一个单独的处理程序。在menusearch.php中:

echo  "<a href='#' id='$Reg' class='reg_link'> $Reg </a><br>";
$string .= "&nbsp;&nbsp;&nbsp;";

附带说明-在PHP中,如果使用"双"引号进行回声,变量将被呈现,因此不需要连接。这就是为什么$Reg只是闲逛。如果使用"single"引号进行回显,则字符串将按字面意思进行解释。

然后在menu.php中,我们有一些javascript:

<script>    
    /* This is a non-standard listener, bound to the body so that any
    dynamically added elements pulled in via ajax, but not in the original document can still be found.
    Also, this can be shortened to a single line, but I split it up for clarity.
    The single-line version is commented out.  */
    $(document.body).on('click', '.reg_link', function(){
        //searchforReg($(this).attr('id'));
        var id = $(this).attr('id'); //get the id of clicked element
        searchforReg(id); //trigger function
    });
    function searchforReg(Region){
        var SearchData= "Table=R&Search="+Region;
        //If you're not familiar with console.log, it's a huge help in debugging
        //console.log('searchData = ', SearchData);
        $.ajax({
            type        : 'POST', 
            url         : 'MenuSearch.php',
            data        :  SearchData
        })
        .done(function(results) {
            $(".Admin").html(results);
        });
    }
</script>

最后,我猜您在MenuSearch.php中对该数据有一些$_POST处理,但我看不到上面的内容,所以我认为它是有效的。。。