要實現用戶在網頁上不用刷新也能到下一題,可以使用 前端和后端交互的技術,比如 AJAX(Asynchronous JavaScript and XML)、Fetch API 或 WebSocket 來實現局部頁面更新。以下是一個實現思路:
1. 使用前端 AJAX 或 Fetch 請求
利用 JavaScript 向后端發起請求,動態獲取下一題的數據,并在頁面上更新內容。
示例代碼:
前端代碼:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>無刷新加載下一題</title><script>async function loadNextQuestion() {const response = await fetch('/next_question'); // 發起請求const data = await response.json(); // 獲取 JSON 數據document.getElementById('question').innerText = data.question; // 更新頁面}</script>
</head>
<body><div><h2 id="question">這是第一題</h2><button onclick="loadNextQuestion()">下一題</button></div>
</body>
</html>
后端代碼(以 Flask 為例):
from flask import Flask, jsonifyapp = Flask(__name__)questions = ["這是第一題","這是第二題","這是第三題",
]current_index = 0@app.route('/next_question')
def next_question():global current_indexcurrent_index = (current_index + 1) % len(questions) # 循環加載題目return jsonify({"question": questions[current_index]})if __name__ == "__main__":app.run(debug=True)
2. 使用 WebSocket 實現實時更新
如果需要更高的實時性,比如自動推送下一題給用戶,可以使用 WebSocket。以下是實現思路:
示例代碼:
前端代碼:
<script>const socket = new WebSocket('ws://localhost:5000/ws'); // 連接 WebSocketsocket.onmessage = function (event) {const data = JSON.parse(event.data);document.getElementById('question').innerText = data.question; // 更新題目};function requestNextQuestion() {socket.send('next'); // 發送請求給后端}
</script>
<button onclick="requestNextQuestion()">下一題</button>
后端代碼(以 Flask-SocketIO 為例):
from flask import Flask
from flask_socketio import SocketIO, emitapp = Flask(__name__)
socketio = SocketIO(app)questions = ["這是第一題", "這是第二題", "這是第三題"]
current_index = 0@socketio.on('next')
def handle_next_question():global current_indexcurrent_index = (current_index + 1) % len(questions)emit('message', {'question': questions[current_index]}, broadcast=True)if __name__ == '__main__':socketio.run(app)
3. 使用前端框架(如 Vue.js、React.js)
如果項目需要更復雜的交互,可以考慮使用現代前端框架,如 Vue 或 React,通過狀態管理動態更新界面。
總結
- 如果是簡單的場景,推薦使用 AJAX 或 Fetch API,簡單易用。
- 如果需要高實時性和雙向通信,選擇 WebSocket。
- 如果項目中已經使用前端框架,可以通過框架提供的機制實現動態加載。