今天是第十四天我們可以寫一個javascript航班飛機追蹤網頁程式管理系統,以下是程式碼
這是網頁的結構,包含輸入框、按鈕和顯示航班資訊的區域。
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>航班追蹤系統</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>航班追蹤系統</h1>
<div class="search-box">
<input type="text" id="flightNumber" placeholder="輸入航班號碼">
<button onclick="getFlightInfo()">搜尋航班</button>
</div>
<div id="flightInfo" class="flight-info">
<!-- 航班資訊將顯示在這裡 -->
</div>
</div>
<script src="app.js"></script>
</body>
</html>
簡單的樣式設計來美化網頁。
body {
font-family: Arial, sans-serif;
background-color: #f4f4f9;
margin: 0;
padding: 0;
text-align: center;
}
.container {
margin-top: 50px;
}
.search-box {
margin-bottom: 20px;
}
input[type="text"] {
padding: 10px;
width: 250px;
border: 1px solid #ccc;
border-radius: 5px;
}
button {
padding: 10px 20px;
background-color: #28a745;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #218838;
}
.flight-info {
margin-top: 20px;
background-color: #fff;
padding: 20px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
display: none;
}
JavaScript 處理航班查詢並顯示結果。如果您使用外部 API,如 OpenSky Network,這裡需要調用 API 並顯示航班資訊。
async function getFlightInfo() {
const flightNumber = document.getElementById('flightNumber').value;
if (flightNumber.trim() === '') {
alert('請輸入航班號碼');
return;
}
try {
// 使用一個假設的 API 呼叫獲取航班資料
const response = await fetch(`https://api.example.com/flight/${flightNumber}`);
const flightData = await response.json();
displayFlightInfo(flightData);
} catch (error) {
alert('無法獲取航班資訊,請稍後再試。');
console.error('Error fetching flight data:', error);
}
}
function displayFlightInfo(flightData) {
const flightInfoDiv = document.getElementById('flightInfo');
flightInfoDiv.style.display = 'block';
flightInfoDiv.innerHTML = `
<h3>航班資訊</h3>
<p><strong>航班號碼:</strong> ${flightData.flightNumber}</p>
<p><strong>航空公司:</strong> ${flightData.airline}</p>
<p><strong>出發機場:</strong> ${flightData.departureAirport}</p>
<p><strong>目的地機場:</strong> ${flightData.arrivalAirport}</p>
<p><strong>飛行狀態:</strong> ${flightData.status}</p>
`;
}
要實現實時的航班追蹤功能,您需要使用像 OpenSky Network 或 FlightAware 等提供實時航班資料的 API。可以從這些 API 提供者那裡註冊並獲取 API Key,然後在 fetch()
方法中使用 API Endpoint 進行資料請求。
async function getFlightInfo() {
const flightNumber = document.getElementById('flightNumber').value;
if (flightNumber.trim() === '') {
alert('請輸入航班號碼');
return;
}
try {
// 使用 OpenSky Network API 進行查詢
const response = await fetch(`https://opensky-network.org/api/states/all`);
const flightData = await response.json();
// 處理航班資料
const filteredFlight = flightData.states.find(flight => flight[1] === flightNumber);
if (filteredFlight) {
const flightInfo = {
flightNumber: flightNumber,
airline: filteredFlight[2],
departureAirport: filteredFlight[11],
arrivalAirport: filteredFlight[13],
status: '飛行中' // 假設狀態
};
displayFlightInfo(flightInfo);
} else {
alert('找不到該航班資訊');
}
} catch (error) {
alert('無法獲取航班資訊,請稍後再試。');
console.error('Error fetching flight data:', error);
}
}
除了基本的航班查詢,您可以擴展系統,提供以下功能:
我會以javascript做主要程式解說
async function getFlightInfo() {
const flightNumber = document.getElementById('flightNumber').value;
if (flightNumber.trim() === '') {
alert('請輸入航班號碼');
return;
}
try {
// 使用一個假設的 API 呼叫獲取航班資料
const response = await fetch(`https://api.example.com/flight/${flightNumber}`);
const flightData = await response.json();
displayFlightInfo(flightData);
} catch (error) {
alert('無法獲取航班資訊,請稍後再試。');
console.error('Error fetching flight data:', error);
}
}
function displayFlightInfo(flightData) {
const flightInfoDiv = document.getElementById('flightInfo');
flightInfoDiv.style.display = 'block';
flightInfoDiv.innerHTML = `
<h3>航班資訊</h3>
<p><strong>航班號碼:</strong> ${flightData.flightNumber}</p>
<p><strong>航空公司:</strong> ${flightData.airline}</p>
<p><strong>出發機場:</strong> ${flightData.departureAirport}</p>
<p><strong>目的地機場:</strong> ${flightData.arrivalAirport}</p>
<p><strong>飛行狀態:</strong> ${flightData.status}</p>
`;
}
getFlightInfo()
函式這個函式是主要的入口點,當使用者點擊「搜尋航班」按鈕時,會呼叫這個函式。
async function getFlightInfo() {
// ...
}
步驟解析:
取得航班號碼:
const flightNumber = document.getElementById('flightNumber').value;
document.getElementById()
獲取輸入框(<input>
元素)的值,也就是使用者輸入的航班號碼。flightNumber
變數現在包含了使用者輸入的航班號碼。檢查航班號碼是否為空:
if (flightNumber.trim() === '') {
alert('請輸入航班號碼');
return;
}
trim()
方法移除字串前後的空白。flightNumber
為空字串,則提示使用者「請輸入航班號碼」,並使用 return
終止函式執行。嘗試獲取航班資料:
try {
// ...
} catch (error) {
// ...
}
try...catch
塊來處理可能發生的錯誤,特別是在進行網路請求時。發送 API 請求:
const response = await fetch(`https://api.example.com/flight/${flightNumber}`);
fetch()
方法發送 HTTP 請求到指定的 API 端點。flightNumber
插入到 URL 中。await
關鍵字使函式等待 fetch()
完成後再繼續執行,需要注意這個函式前面有 async
關鍵字。解析回應資料:
const flightData = await response.json();
response.json()
將回應的 JSON 資料解析為 JavaScript 物件。await
等待解析完成。顯示航班資訊:
displayFlightInfo(flightData);
displayFlightInfo()
函式,並將獲取的 flightData
傳遞給它,用於在頁面上顯示航班資訊。錯誤處理:
} catch (error) {
alert('無法獲取航班資訊,請稍後再試。');
console.error('Error fetching flight data:', error);
}
try
塊中發生錯誤(例如網路問題、伺服器錯誤等),會進入 catch
塊。alert()
提示使用者「無法獲取航班資訊,請稍後再試。」。console.error()
將錯誤資訊輸出到瀏覽器的控制台,方便開發者進行除錯。displayFlightInfo(flightData)
函式這個函式負責將獲取的航班資料顯示在網頁上。
function displayFlightInfo(flightData) {
// ...
}
步驟解析:
取得顯示航班資訊的容器:
const flightInfoDiv = document.getElementById('flightInfo');
document.getElementById()
獲取要顯示航班資訊的 <div>
元素。顯示容器:
flightInfoDiv.style.display = 'block';
display
屬性設為 'block'
,確保容器是可見的。display: none;
,隱藏起來,只有在有資料時才顯示。插入航班資訊:
flightInfoDiv.innerHTML = `
<h3>航班資訊</h3>
<p><strong>航班號碼:</strong> ${flightData.flightNumber}</p>
<p><strong>航空公司:</strong> ${flightData.airline}</p>
<p><strong>出發機場:</strong> ${flightData.departureAirport}</p>
<p><strong>目的地機場:</strong> ${flightData.arrivalAirport}</p>
<p><strong>飛行狀態:</strong> ${flightData.status}</p>
`;
${flightData.flightNumber}
等表示法會被替換為 flightData
物件中的相應屬性值。flightInfoDiv.innerHTML
,這會更新容器中的內容。async
和 await
:
async
關鍵字用於宣告異步函式,允許在函式內使用 await
。await
用於等待一個 Promise
完成,只有在 async
函式中才能使用。使用假設的 API:
fetch()
呼叫的 URL 是 https://api.example.com/flight/${flightNumber}
,這是一個佔位符。錯誤處理:
try...catch
可以捕獲異步操作中的錯誤。DOM 操作:
document.getElementById()
、element.style
、element.innerHTML
等方式操作 DOM,更新網頁內容。整合真實的航班資料 API:
fetch()
的 URL、請求方法、請求頭和參數。處理跨域問題:
改善使用者體驗:
安全性考量:
這段 JavaScript 程式碼的主要功能是: