Как вернуть значение для проверки формы с помощью функции обратного вызова? Это не работает для меня.
<form action="loggedin.php" onsubmit="return test(valid)" method="post">
function test(callback) {
var k = "";
var httpRequest = new XMLHttpRequest();
httpRequest.onload = function(){
k = callback(httpRequest.responseText);
return k;
};
httpRequest.open("POST", "check.php",true);
var a = document.getElementById("email").value;
var b = document.getElementById("pwd").value;
httpRequest.send("email=" + a + "&passwd=" + b);
}
function valid(resp){
alert(resp); // resp is correctly defined here
if(resp == "Correct"){
return true;
}
else{
return false;
}
}
Мне нужно проверить данные формы с помощью ответа ajax. Я хочу вернуть true или false для формирования метода onsubmit. Может ли функция обратного вызова возвращать значение?
AJAX отправляет асинхронный запрос в нужное место, то есть он запускается независимо от программы после этого. Цель функции обратного вызова от AJAX - применить то, что возвращается на страницу, когда оно возвращается, поэтому оно не может вернуть значение в исходную форму, из которой она была вызвана.
Что-то, что вы можете сделать, чтобы сократить файлы php, - это объединить файлы проверки и регистрации, а также очистить onsubmit и сохранить его в виде обычной формы HTML или продолжить использование ajax.
В любом случае, обновление вашего кода, который будет запускать loggedin.php после первого ajax, будет возвращен
<form action="loggedin.php" onsubmit="return test(valid)" method="post">
function test(callback) {
var k = "";
var httpRequest = new XMLHttpRequest();
httpRequest.onload = function(){
k = callback(httpRequest.responseText);
return k;
};
httpRequest.open("POST", "check.php",true);
var a = document.getElementById("email").value;
var b = document.getElementById("pwd").value;
httpRequest.send("email=" + a + "&passwd=" + b);
}
function valid(resp){
alert(resp); // resp is correctly defined here
if(resp == "Correct"){
var httpRequest = new XMLHttpRequest();
httpRequest.onload = function(){
// do what needs to be done to the page, like reload
}
httpRequest.open("POST", "loggedin.php", true);
// this is just using the variables from earlier
var a = document.getElementById("email").value;
var b = document.getElementById("pwd").value;
httpRequest.send("email="+ a +"&passwd="+ b);
}
else{
return false;
}
}