【发布时间】:2012-01-23 12:27:37
【问题描述】:
已解决:我将 $_SERVER['REQUEST_METHOD'] != 'post' 设为小写。那显然必须是资本……我一将其资本化,它就起作用了,这是唯一的变化。我投票给你,为你提供帮助的优秀小伙子。谢谢!
我在使用 Ajax 完成一个简单的数学问题后生成了一个提交按钮。 Ajax 工作正常。我可以使用 var_dump/print_r 验证 $_POST 和 $_SESSION 数据是否正确传递。提交按钮就像我期望的那样在输出 div 中。
但是,当我按下提交按钮时,它会重新加载页面,但不会触发提交。它返回表单,$_POST 变量为空/根本没有设置。
提交按钮位于表单标签中。为什么它提交表单而不是数据/我如何让它工作?
我认为您不需要代码来回答问题,但是,这里是代码的简化版本:
// In a server request method block on test.php:
if( $_SERVER['REQUEST_METHOD'] != 'POST' ){
<form id="addUserId" name="addUser" method="post" action="test.php" >
<table id="formCreatoraddUserIdTableId" cellpadding="2" cellspacing="2" width="100%" >
<tr id="formCreatorRowId0" >
<td valign="top" ><font>3 minus 1: </font></td>
<td valign="top" ><input type="text" id="validatorId" name="validate" onkeyup="makeAjaxRequest('./ajax/captchaSubmitButtonCheck.php', 'captcha='+encodeURIComponent(document.getElementById('validatorId').value),'captchaOutputDiv', '1');" autocomplete="off" />
</td>
</tr>
<tr id="formCreatorRowId1" >
<td valign="top" ><font></font></td>
<td valign="top" >
<div id="captchaOutputDiv" ></div>
</td>
</tr>
</table>
<input type="hidden" name="refreshPostPrevention" />
</form>
}else{
print_r( $_POST ); // will be empty
}
// in an ajax file captchaSubmitButtonCheck.php:
<?PHP
if( $_SERVER['REQUEST_METHOD'] == 'POST' ){
printr( $_POST );
printr( $_SESSION, 'SESSION' );
if( $_POST['captcha'] == $_SESSION['captcha'] ){
echo '<input type="submit" value="Save" />';
}else{
echo '<font class="red">Your math was wrong. Try again.</font>';
}
}
?>
// the JS
function makeAjaxRequest(url, params, output, image) {
var getdate = new Date(); //Used to prevent caching during ajax call
if( image == 1 ){
document.getElementById(output).innerHTML='<img src="./images/template/ajax-loader.gif"></img>';
}
if(xmlhttp) {
xmlhttp.open("POST",url,true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
document.getElementById(output).innerHTML=xmlhttp.responseText; //Update the HTML Form element
}
else {
alert("Error during AJAX call. Please try again");
}
}
}
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send(params); //Posting txtname to PHP File
}
}
【问题讨论】:
-
在下面查看我的答案,但是代码中的提交按钮在哪里?你试图用 显示什么意思是 ?检查:w3schools.com/tags/att_input_type.asp
-
验证器名称中有一个 type-o。假设是输入类型=“文本”而不是输入类型=“输入”。晚了。在 ajax 处理之后,提交按钮出现在 captchaOutputDiv 中。
-
唯一的 JS 是 makeAjaxRequest 函数,它只是链接到您非常标准的 ajax 请求。没有 jquery 或其他任何特殊的东西。
-
printr( $_POST )和printr( $_SESSION, 'SESSION' );应该是print_r(); -
printr 是我为 echo '
' 提供的功能;打印_r();回声'
';只是节省一些打字