将XMLHttpRequest.responseText保存在Javascript变量中

将XMLHttpRequest.responseText保存在Javascript变量中,javascript,php,ajax,Javascript,Php,Ajax,这个问题以前被问过两次,但我无论如何都无法让它起作用。 在阅读了这些文章之后,我了解了如何调用回调函数,因为XMLHttpRequest是异步的。(不管怎么说似乎很明显) 因此,我创建了我的phpfile checkemail.php: <?php if(isset($_POST['email'])){ //if we get the email sucessfully $email = mysqli_real_escape_string($db, $_POST['email'])

这个问题以前被问过两次,但我无论如何都无法让它起作用。 在阅读了这些文章之后,我了解了如何调用回调函数,因为XMLHttpRequest是异步的。(不管怎么说似乎很明显)

因此,我创建了我的phpfile checkemail.php:

<?php
if(isset($_POST['email'])){ //if we get the email sucessfully
    $email = mysqli_real_escape_string($db, $_POST['email']);

    if(!empty($email)){

        $email_query = mysqli_query($db, "SELECT COUNT(`email`) FROM `users` WHERE `email`='$email'");
        $email_result = mysqli_fetch_row($email_query);

        if($email_result[0]==0){
            //haven't found the email in the DB
            echo "0";
        } else{
            //found the email in the DB!
            echo "1";
        }
    }
}
?>
有趣的是,
console.log(hr.responseText)给出了绝对正确的结果

但是,当我调用函数
checkemail('test@test.com“)
函数回调没有被调用,或者我理解错了吗

非常感谢您的帮助。提前谢谢


我也尝试过这样做,因为这对我来说更符合逻辑(当同一代码块中的console.log已经给了我正确的结果时…):


在另一篇文章中,我看到了这种说法

如果将函数调用更改为
hr.open(“GET”,url,false),这将使您的调用同步,JavaScript将等待收到响应

当然,正如我之前所说,我想打电话
if(检查电子邮件()test@test.com“)=”1“
。。。这个助手会有什么帮助吗?到目前为止我还没能让它工作。。。可悲的是:(


既然@Hawk给了我一些提示,我已经尝试了更多的方法让我的函数返回true或false

但是我想知道我的函数是否不能调用回调函数
callback

function callback(responseText){
    var save = responseText;
    return save;
}
function checkemail(email){

    var email = email;
    var hr = new XMLHttpRequest();
    hr.open("POST", "./inc/func/check_email.php", true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    // Send the data to PHP
    hr.send('email='+email);
    // Access the onreadystatechange event for the XMLHttpRequest object
    hr.onreadystatechange = function() {
        if(hr.readyState == 4 && hr.status == 200) {
            email=hr.responseText;
            //return email
            document.getElementById('status').innerHTML="email is used already: "+email;
            return callback(email);
        }
    //return callback(email);
    }
}
在函数checkemail外部定义函数callback与在函数checkemail内部定义函数callback有区别吗

function checkemail(email){
    function callback(responseText){
        var save = responseText;
        return save;
    }
    var email = email;
    var hr = new XMLHttpRequest();
    hr.open("POST", "./inc/func/check_email.php", true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    // Send the data to PHP
    hr.send('email='+email);
    // Access the onreadystatechange event for the XMLHttpRequest object
    hr.onreadystatechange = function() {
        if(hr.readyState == 4 && hr.status == 200) {
            email=hr.responseText;
            //return email
            document.getElementById('status').innerHTML="email is used already: "+email;
            return callback(email);
        }
    //return callback(email);
    }
}
试试这个

function checkemail(email)
{
var email = email;
//code
if( hr.readystatechange == 4 & hr.status == 200 )
{
email = hr.responseText;
}
}
这样,电子邮件将更改并存储在函数范围内的电子邮件中,并在函数执行时保持不变,希望有帮助:)

尝试将调用回调的部分(hr.responsetext)更改为

返回回调(hr.responseText)

这样,您将返回一个函数,该函数将返回save..我祈祷它能工作..)


请让我知道它是否工作

,但我如何异步返回函数的这个变量?你是什么意思?请求已经被异步处理了,不是吗?我想要
checkemail('test@test.com)
返回
hr.responseText
。当我设置变量email时,我得到了保存数据的位置。但是当我返回它时,它并没有返回新的和过度编写的数据:
函数checkemail(email){var email=email;if(hr.readystatechange==4&hr.status==200){email=hr.responseText;}return email;}
当您“return email;”,它正在返回电子邮件,但要在窗口上看到它,您必须使用某种文本输出,除非您在控制台上使用它。您可以尝试使用document.write查看返回的值,或者尝试在控制台中调用checkemail,因为返回的值没有被解析为文本代码,它只是被返回而没有显示在窗口中。例如。函数add(x,y){return x+y},调用时不会在窗口上显示结果,但在使用document.write(add(5,6))时会显示结果。我希望这是有道理的
function checkemail(email){
    function callback(responseText){
        var save = responseText;
        return save;
    }
    var email = email;
    var hr = new XMLHttpRequest();
    hr.open("POST", "./inc/func/check_email.php", true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    // Send the data to PHP
    hr.send('email='+email);
    // Access the onreadystatechange event for the XMLHttpRequest object
    hr.onreadystatechange = function() {
        if(hr.readyState == 4 && hr.status == 200) {
            email=hr.responseText;
            //return email
            document.getElementById('status').innerHTML="email is used already: "+email;
            return callback(email);
        }
    //return callback(email);
    }
}
function checkemail(email)
{
var email = email;
//code
if( hr.readystatechange == 4 & hr.status == 200 )
{
email = hr.responseText;
}
}