看来我的问题之前已经问过几次了,但我仍然无法让我的代码工作-即使我相信我使用相同的代码作为这些问题的解决方案。
所以我使用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字母是不必要的)