Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery/Ajax isset(MyFunction)总是返回false_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript JQuery/Ajax isset(MyFunction)总是返回false

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

我已经编写了一个php函数来生成一个随机数学问题,用于反垃圾邮件。它设置了两个会话变量的问题和答案

在HTML文件中,我在documentready事件中调用函数,并将结果发送给div以获取问题,这很好

$(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";
}