当我试图通过POST将html按钮标记中的数据提交到PHP处理脚本时,遇到了一个相当令人恼火的问题。
这是我的密码。。。
(1) HTML表单:
<form id="pub-form1" method="post">
<button type="submit" name="All" value="true">All Publishers</button>
<button type="submit" name="Current" value="true">Current Publishers</button>
<button type="submit" name="Users" value="true">User Priveleges</button>
</form>
(2) 处理POST请求的jQuery脚本:
$(document).ready(function () {
$('#pub-form1').submit(function (e) {
e.preventDefault();
$('#results').contents().remove();
var formData = $(this).serialize();
$("input").prop("disabled", true);
request = $.post('VRC_PublishersProcess.php', formData, resultsMessage);
request.fail(function() {
$('#results').append("<span id='"reply'">Your search failed for an unknown reason. Please try again in a few minutes.</ span>");
$("input").prop("disabled", false); });
function resultsMessage(data) {
$('#results').append(data);
$("input").prop("disabled", false);
}
});
});
(3) PHP处理脚本:
//All Publishers
if(isset($_POST['All'])) {
if(!empty($_POST['All'])) {
$result = $members->selectAllMembers();
if($result === true) {
exit(); //Kill the process
}
else {
echo $result;
exit(); //Kill the process
}
}
else {
$error = "<span id='"reply'">Not all fields were entered correctly!</ span>";
echo $error;
exit(); //Kill the process
}
}
//Current Publishers
if(isset($_POST['Current'])) {
if(!empty($_POST['Current'])) {
$result = $members->selectCurrentPublishers();
if($result === true) {
exit(); //Kill the process
}
else {
echo $result;
exit(); //Kill the process
}
}
else {
$error = "<span id='"reply'">Not all fields were entered correctly!</ span>";
echo $error;
exit(); //Kill the process
}
}
//Users
if(isset($_POST['Users'])) {
if(!empty($_POST['Users'])) {
$result = $members->selectUserPublishers();
if($result === true) {
exit(); //Kill the process
}
else {
echo $result;
exit(); //Kill the process
}
}
else {
$error = "<span id='"reply'">Not all fields were entered correctly!</ span>";
echo $error;
exit(); //Kill the process
}
}
我不太确定问题的原因是什么。javascript或PHP没有引发错误;页面保持空白,没有任何结果。
jQuery函数似乎工作正常。我已经在其他表单上使用过多次这种特殊的方法,它可以正确地处理POST请求。我甚至能够触发它的失败;它的反应是正确的。
PHP处理脚本似乎也运行正常。同样,它派生自已成功处理来自同一页面的POST请求的其他脚本。
我的怀疑集中在HTML表单本身。以下是我的理论:(1)按钮不是提交"本身"。换句话说,由于没有文本或其他形式的输入,所以真的没有什么可提交的。(2) 由于某些原因,这个名称与我的PHP脚本所要查找的内容不对应。例如,如果提交了"All Publishers"
,那么我的PHP脚本正在查找$_POST['All']
。但由于某种原因,该请求没有保存在PHP超全局数组中的该标识符下。
我的目标是为最终用户提供三个显示数据的选项。现在,这不起作用。
如有任何反馈,我们将不胜感激。
最终解决方案:
<div id="pub1">
<a href="#" class="drop" id="one">Other</a>
<div id="displayselect" method="post">
<form id="select1" method="post">
<input type="hidden" name="All" value="1" />
</form>
<form id="select2" method="post">
<input type="hidden" name="Current" value="1" />
</form>
<form id="select3" method="post">
<input type="hidden" name="Users" value="1" />
</form>
<button type="submit" name="All" form="select1">All Publishers</button>
<button type="submit" name="Current" form="select2">Current Publishers</button>
<button type="submit" name="Users" form="select3">User Priveleges</button>
</div>
</div>
显然,在jQuery中进行了适当的修改。。。
想清楚了,
jQuery.serialize在按钮上不起作用(http://api.jquery.com/serialize/)它只适用于input, textarea, select
,所以我尝试将HTML button
元素切换为<input type="submit" ...
,但效果不佳,因为jQuery在序列化时忽略了submit
标记,我尝试添加一个<input type="hidden" name="test" value="1" />
,并检查出它序列化的是test=1
,所以你必须稍微更改一下形式。
jsFiddle用于测试:http://jsfiddle.net/4D8Nz/