TLDR: Я хотел бы дождаться выполнения первого запроса, прежде чем перейти к 2cnd et c.
Здравствуйте,
В настоящее время я работаю над страницей HotSpot. Пользователь должен ввести свой адрес электронной почты, и вуаля! он получает inte rnet доступ.
То, что SUPPOSED происходит в фоновом режиме, это когда пользователь вставляет свою электронную почту и нажимает send;
- и AJAX asyn c POST выполняется на маршрутизаторе с именем пользователя и паролем,
, затем страница js / html ожидает готовности ReadyState === 4 (DONE) ответ от роутера,
an AJAX asyn c POST выполняется на сервере в другой сети (для этого требуется, чтобы у пользователя было соединение inte rnet), который отправляет пользователям электронное письмо,
затем страница js / html ожидает ответа DONE
пользователь перенаправлен.
Вот в основном то, что должно произойти. На самом деле JS не ожидает готовности ReadyState === 4 и Status === 200. Когда пользователь нажимает кнопку Отправить, он сразу же перенаправляется.
Я не могу используйте JQuery, так как маршрутизатор (Mikrotik) использует $ для своих собственных целей.
После проверки сети с помощью инструмента F12 я вижу, что состояние POST to router имеет значение 200 и является с правильными параметрами (username = HSuser & password = SimpleUserPassword), и я вижу, что POST для сервера имеет статус 200, а также имеет правильные параметры (адрес электронной почты ie: Email = Ba% 40loo.ns).
Полагаю, мой JS код как-то не так, так как он не ждет.
Кроме того, для некоторого резонанса после игры с кодом в базу данных больше не вставляются электронные письма (они были раньше). , не знаю, в чем проблема сейчас.)
Ниже приведен текущий код. Я также выложу предыдущую версию (которая также не работала) на случай, если кто-то сможет обнаружить проблему там.
Если кому-то понадобится какая-либо дополнительная информация, сообщите мне.
Спасибо Вы.
Редактировать 3. :
Я продолжал читать Переполнение стека и наткнулся на этот фрагмент информации . ..
Сервер отвечает за предоставление status
, а пользовательский агент предоставляет readyState
.
Это выполняется на стороне сервера автоматически или выполняется Мне нужно как-то это реализовать?
Редактировать 1. :
Я пробовал консольный журнал здесь
if (xhr.readyState === DONE){
console.log("XHR1" + xhr.readyState);
console.log("XHR1" + xhr.status);
if (xhr.status === OK){
и здесь
if (xhr2.readyState === DONE){
console.log("XHR2" + xhr2.readyState);
console.log("XHR2" + xhr2.status);
if (xhr2.status === OK){
и я получил только XHR1 (XHR14 и XHR1200), я ничего не получил от XHR2 .
Редактировать 2. :
Попытка замены onreadystatechange на onload все равно делает то же самое.
Текущий HTML код:
<!DOCTYPE html>
<html>
<head>
<meta content="text/html" />
<meta charset="utf-8" />
<title>HotSpot</title>
</head>
<body>
<!-- Email form which is saved into the DB -->
<form accept-charset="utf-8" name="mail" onsubmit="return false;" method="post" id="mail">
<h1>Hotspot</h1>
<h2>To gain internet access, enter your email.</h2>
<br />
<input type="text" id="email" name="email" autofocus="autofocus" />
<br />
<input type="submit" value="Submit" id="submit_ok" name="submit_ok" /> <br />
</form>
<script type="text/javascript">
document.getElementById("submit_ok").addEventListener("click", SendAjax);
function SendAjax() {
var email = document.getElementById("email").value;
console.log(email);
// Check if fields are empty
if (email=="") {
alert("Please enter your email.");
}
// AJAX code to submit form
else{
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://router/login', true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded", "Access-Control-Allow-Origin: *");
xhr.onreadystatechange = function () {
var DONE = 4;
var OK = 200;
if (xhr.readyState === DONE){
if (xhr.status === OK){
var xhr2 = new XMLHttpRequest();
xhr2.open('POST', 'http://server/insertDB.php', true);
xhr2.setRequestHeader("Content-type", "application/x-www-form-urlencoded", "Access-Control-Allow-Origin: *");
var useremail = document.getElementById("email").value;
xhr2.onreadystatechange = function () {
if (xhr2.readyState === DONE){
if (xhr2.status === OK){
location.href = "http://server/redirected.html";
}
}
}
}
xhr2.send("Email="+encodeURIComponent(useremail));
}
}
xhr.send("username=HSuser&password=SimpleUserPassword");
}
};
</script>
</body>
</html>
Текущий * 1 114 * код:
<?php
require ('connect.php');
$clean_email = "";
$cleaner_email = "";
if(isset($_POST['email']) && !empty($_POST['email'])){
//sanitize with filter
$clean_email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
//sanitize with test_input
$cleaner_email = test_input($clean_email);
//validate with filter
if (filter_var($cleaner_email,FILTER_VALIDATE_EMAIL)){
// email is valid and ready for use
echo "Email is valid";
//Email is a column in the DB
$stmt = $DB->prepare("INSERT INTO addresses (Email) VALUES (?)");
$stmt->bind_param("s", $cleaner_email);
$stmt->execute();
$stmt->close();
} else {
// email is invalid and should be rejected
echo "Invalid email, try again";
}
} else {
echo "Please enter an email";
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$DB->close();
?>
Предыдущий HTML / JS код:
function SendAjax() {
var email = document.getElementById("email").value;
console.log(email);
// Check if fields are empty
if (email=="") {
alert("Please enter your email.");
}
// AJAX code to submit form
else{
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://router/login', true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded", "Access-Control-Allow-Origin: *");
xhr.onreadystatechange = function () {
var DONE = this.DONE || 4;
if (xhr.readyState === XMLHttpRequest.DONE){
var xhr2 = new XMLHttpRequest();
xhr2.open('POST', 'http://server/insertDB.php', true);
xhr2.setRequestHeader("Content-type", "application/x-www-form-urlencoded", "Access-Control-Allow-Origin: *");
var useremail = document.getElementById("email").value;
xhr2.onreadystatechange = function () {
var DONE = this.DONE || 4;
if (xhr2.readyState === XMLHttpRequest.DONE) {
location.href = "http://server/redirected.html";
}
};
xhr2.send("Email="+encodeURIComponent(useremail));
}
}
xhr.send("popup=true&username=HSuser&password=SimpleUserPassword");
}
}