Javascript JQuery/Ajax isset(MyFunction)总是返回false
我已经编写了一个php函数来生成一个随机数学问题,用于反垃圾邮件。它设置了两个会话变量的问题和答案 在HTML文件中,我在documentready事件中调用函数,并将结果发送给div以获取问题,这很好Javascript JQuery/Ajax isset(MyFunction)总是返回false,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我已经编写了一个php函数来生成一个随机数学问题,用于反垃圾邮件。它设置了两个会话变量的问题和答案 在HTML文件中,我在documentready事件中调用函数,并将结果发送给div以获取问题,这很好 $(document).ready(function(){ $.ajax({ url: "sec.php", type: "POST", data: {"GetQA":""}, success: function(dat
$(document).ready(function(){
$.ajax({
url: "sec.php",
type: "POST",
data: {"GetQA":""},
success: function(data) {
$("#no_spam_Q").replaceWith(data);
}
});
});
我遇到的问题是在用户单击提交按钮后刷新问题文本
jQuery:
$(document).on("click", "#submit", function () {
var comment = document.getElementById('comment').value
var no_spam = document.getElementById('no_spam').value
$.ajax({
type:"POST",
url: "comments-set.php",
dataType: "html",
data:{no_spam, comment:comment},
success: function(data){
$("#display").html(data);
$.ajax({
url: "sec.php",
type: "POST",
data: {"GetQA":""},
success: function(data) {
$("#no_spam_Q").replaceWith(data);
}
});
}
});
});
在这里,嵌套的ajax调用应该刷新问答,但它似乎总是失败
PHP:
php总是返回“notset”,因此反垃圾邮件问题文本不会更改。在另一个检查答案的PHP文件中,如果给出了错误的答案,我会回显正确的答案(只是为了调试)。令人困惑的是,即使返回“未设置”,也会生成一个新的答案,因为两次输入相同的答案都无法通过我的检查,并且会显示关于正确答案的回显消息
我猜这与查询是异步的有关,但是尽管我花了很多时间阅读了API和其他问题,我还是不知道如何解决它
以下是我尝试过的:
- 将对GetQA的嵌套调用从success函数移动到 提交按钮的事件
- 将函数从success移到comment-set.php,并在调用comment-set.php后运行它
另一方面,我将一个空字符串传递给GetQA,因为如果我只使用
数据:{“GetQA”}
,编译器会抱怨-如何在没有参数的情况下调用函数?您必须在数据:{no_spam,comment:comment}
中传递GetQA
参数。它将始终返回false,因为您从未在第二次调用中设置它谢谢,但我是JS新手,不明白您的意思-请在您的注释上再扩展一点,或者发布一个答案?php isset函数检查是否设置了键/变量。在第二个ajax调用中,您没有传递GetQA
参数(data:{no_spam,comment:comment}
)。因此,在服务器内部的$\u POST
中,它永远不会在变量中找到GetQA
键。这就是为什么它在其他情况下下降的原因。您可以通过传递GetQA
来避免这个问题,只要有一个空字符串。像这样的data:{no_spam,comment:comment,GetQA:'}
no这根本不起作用,它会在从comment-set.php返回之前生成一个新的答案,所以答案总是错误的
session_start();
Function GetQA($str){
// some code to generate the question & answer
return $secFinal;
}
if (isset($_POST['GetQA'])) {
echo GetQA($_POST['GetQA']);
}else{
echo "not set";
}