将XMLHttpRequest.responseText保存在Javascript变量中
这个问题以前被问过两次,但我无论如何都无法让它起作用。 在阅读了这些文章之后,我了解了如何调用回调函数,因为XMLHttpRequest是异步的。(不管怎么说似乎很明显) 因此,我创建了我的phpfile checkemail.php:将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'])
<?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;
}
}