如何使用JQuery将一个值从弹出式表单传递到PHP页面;Ajax


How to pass a value from a popup form to a PHP page using JQuery & Ajax?

看来我的问题之前已经问过几次了,但我仍然无法让我的代码工作-即使我相信我使用相同的代码作为这些问题的解决方案。

所以我使用SimpleModal JQuery插件在弹出窗口中创建表单。此窗口包含以下HTML:

<div id="containerInfo" class='modalPopUp' style='display:none'>
        <form id="frmContainerInfo" method="post" action="index.php">
            <div style="border-bottom: 1px solid #000">
                <h1>Test popup/h1>
            </div>
            <br/>
            <div class='cargoInfoForm'>
                    <label class='cifLabel'>Location:</label>
                    <select id="ddlLoc" name="ddlLoc" class="cifDDL" style="width: 130">
                        <option value="Netherlands">Netherlands</option>
                        <option value="Paris">Paris</option>
                        <option value="Hongkong">Hongkong</option>
                        <option value="Tokyo">Tokyo</option>
                    </select>
                    <br/>
                    <label class='cifLabel'>Date:</label>
                    <input type="text" id="locDatePicker" name="locDatePicker" value="" class="cifInputField" style="width: 130">
                    <br/>
                    <button id="saveLocInfo" name="buttonSubmitInfo" type="submit" class="cifSaveButton">Save</button>
            </div>
        </form>
</div>

然后我尝试在按下弹出窗口中的Save按钮时将这个表单的结果发送到我的PHP页面,这样我就可以检索两个字段(ddLock和locDatePicker)的值。为此,我尝试使用JQuery和Ajax,如下所示:

<script>
        $(document).ready(function() 
        {
             $(".editDisplay-button").click(function(){
                $("#containerInfo").modal();
                }); 
            $("#saveLocInfo").on("click", function(){
            var locval  = $("#ddlLoc").val();
            var dateval    = $("#locDatePicker").val();
            var locvalLen    = locval.length;
            if(locvalLen < 4) {
                    $("#locval").addClass("error");
            }
            if(locvalLen >= 4) {
        // if location lettercount is four or bigger
        $("#saveLocInfo").replaceWith("<em>sending...</em>");
                $.ajax({
                type: 'POST',
                url: 'container.php',
                data: $("#frmContainerInfo").serialize(),
                success: function(data) {
                                var $response=$(data);
                                alert($response.filter('#ddlLoc').text());   
                            }
                    });

                    }
                });
            }); 
    </script>

似乎我检索的数据不包含任何值,因为我的警报没有显示位置字段值。考虑到我正在模仿其他人有这个问题的工作代码,我觉得很奇怪。在此JQuery/Ajax代码之后,我尝试访问PHP文件中的值(尽管我相信我从未检索过开始的值),如下所示:

<?php
     $location = $_POST['ddlLoc'];
     $dateFieldValue = $_POST['locDatePicker'];
     echo ($location);
     echo ($dateFieldValue);
?>

我怎么能得到这个工作,或者,我怎么能检索我的弹出窗口的表单在我的PHP文件的输入字段的值?

谢谢!

发生这种情况是因为您试图使用不是输入的name的键从$_POST数组检索值。

您正在使用ID。错了!

<?php
     $location = $_POST['ddlLock']; // "ddLock" is the ID in the HTML. Well, neither that because there's a "k" letter.
     $dateFieldValue = $_POST['locDatePicker']; // "locDatePicker" is the ID in the HTML
     echo ($location);
     echo ($dateFieldValue);
?>

输入文本

<input type="text" id="locDatePicker" value="" class="cifInputField" style="width: 130">

甚至没有任何name属性。改成这样:

<input type="text" id="locDatePicker" name="locDatePicker" value="" class="cifInputField" style="width: 130">

<select>也是如此。那是你的,看到了吗?name和ID是不同的,你在PHP代码中调用ID。

<select id="ddlLoc" name="ddlLocOptions" class="cifDDL" style="width: 130">
    <option value="Netherlands">Netherlands</option>
    <option value="Paris">Paris</option>
    <option value="Hongkong">Hongkong</option>
    <option value="Tokyo">Tokyo</option>
</select>

改成:

<select id="ddlLoc" name="ddlLoc" class="cifDDL" style="width: 130">
    <option value="Netherlands">Netherlands</option>
    <option value="Paris">Paris</option>
    <option value="Hongkong">Hongkong</option>
    <option value="Tokyo">Tokyo</option>
</select>

修改你的PHP代码,使它能工作

<?php
     $location = $_POST['ddlLoc']; // "ddLoc" is now the NAME attr
     $dateFieldValue = $_POST['locDatePicker']; // "locDatePicker" is now the NAME attr
     echo ($location);
     echo ($dateFieldValue);
?>

重要:小心!你写的'ddlLoc k '在PHP中,但名称应该是'ddlLoc'我猜(k字母是不必要的)