Я пытаюсь на сайте из базы данных получить значение из колонки.
В бэке использую JavsScript (XMLHttpRequest) и Python.
При запуске локалки на 127.0.0.1:8080 всё работает прекрасно, данные из БД возвращаются в параграф.
Запустил туннель через CloudPub, захожу в F12-Network-Timing, и получаю - CAUTION: request is not finished yet!
В CloudPub в истории запросов есть этот запрос и ответ от него тоже, но на сайте он не возвращается.
Какими-то окольными путями у меня получалось добиться завершения запроса, но получал нежеланный результат.
Ниже будут фрагменты кода.
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test</title>
<script src="https://telegram.org/js/telegram-web-app.js"></script>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div id="usercard"></div>
<p>FICs: <span id="result"></span></p>
</body>
<script src="script.js"></script>
</html>
JS:
function fetchData(user_identificator, data_type){
let xhr = new XMLHttpRequest();
xhr.open('GET', `/cgi-bin/data.py?user_identificator=${user_identificator}&data=${data_type}`, true);
xhr.onload = function() {
if (xhr.status === 200) {
console.log('Response received:', xhr.responseText);
let data = JSON.parse(xhr.responseText);
// document.getElementById('result').innerText = data.message;
document.getElementById('result').innerHTML = data;
} else {
console.error('Error:', xhr.statusText);
}
};
xhr.send();
}
fetchData("1111100000", "id");
data.py:
import cgi
import pymysql
from pymysql import cursors
db_host = 'FVH1.spaceweb.ru'
db_user = 'conventional_user'
db_password = '...'
db_name = 'database'
def get_user_data(user_id, data):
try:
connection = pymysql.connect(host=db_host, user=db_user, password=db_password, database=db_name, port=3306,
cursorclass=cursors.DictCursor)
with connection.cursor() as cursor:
sql = f"SELECT {data} FROM Data WHERE user_id = %s"
cursor.execute(sql, (user_id,))
user = cursor.fetchone()
if user:
return user[data]
else:
return ""
except pymysql.Error as e:
return f"Database error: {e}"
finally:
if connection:
connection.close()
print("Access-Control-Allow-Origin: *")
print("Access-Control-Allow-Methods: GET, POST, OPTIONS, CORS")
print("Access-Control-Allow-Headers: Content-Type")
print("Content-type: text/plain\n")
form = cgi.FieldStorage()
user_identificator = form.getvalue("user_identificator")
data_type = form.getvalue("data")
user_info = get_user_data(user_id=user_identificator, data=data_type)
print(f"{user_info}")
Прошу помочь разобраться, нигде так и не нашёл, где описывают очень понятно, как завершить запрос.