问题描述
我正在填写空白测验(current state)。在我的index.php
中,我想验证用户input
是正确的答案(例如,它与我的MySQL服务器中的内容匹配)。
我可以通过<?php echo ... ?>
输入答案来验证答案是否正确,但这会导致答案在html文件中,这具有允许作弊的缺点。
我从this answer收集到,我需要使用类似$.post('file.php',{variable: variableToSend});
的东西,所以我尝试这样做:
<script>
function process_guess() {
var input = [...snip...];
[...snip...]
var is_correct = $.post('process_answer.php',{guess: input});
[...snip...]
if(is_correct == 1) {
[...snip...]
}
else {
[...snip...]
}
}
</script>
我的index.php
中其他地方的html形式调用了上述Javascript函数;我可以使用console.log
来验证上面的input
变量是实际的用户输入。但是,从console.log
来看,我使用$.post
的方式是完全错误的,但是我不确定正确的语法是什么。
在process_answer.php
中,我有:
<?php
if($_POST['guess'] == $problem_data["answer"]) echo "1";
else echo "0";
?>
我不确定如何从这里继续。
问题:如何确定HTML形式的答案是否正确(通过$ .post调用PHP)而没有透露答案?
解决方法
你的方法很好。进行ajax调用是一种很好的方法。
根据the documentation,在Javascript中,您只需要等待服务器响应。但是您必须注意,它是异步的(因此下面的代码可能会在回调之前执行)。我建议像这样。
$.post('process_answer.php',{guess: input})
.done(function( data ) {
// Execute your logic inside the request callback
if(data) {
[...snip...]
}
else {
[...snip...]
}
}
);
在您的php中,我建议退出脚本或直接返回一个值
<?php
// return a json encoded boolean
header('Content-type: application/json');
echo json_encode($_POST['guess'] == $problem_data["answer"]);die;
?>
在菲尔评论后编辑:
Phil是对的,我已经更新了示例。