日常更新: 04-13 09:41

This commit is contained in:
yf1688 2025-04-13 09:41:26 +08:00
parent ff22e03bae
commit 2b845e5a03
1 changed files with 72 additions and 50 deletions

122
jm.js
View File

@ -16,62 +16,84 @@ function clearInput() {
optionsList.style.display = "none"; // 清空输入框时隐藏选项列表
}
function toggleOptions() {
// 缓存数据,避免重复请求
let cachedData = null;
async function fetchData() {
// 如果已有缓存,直接返回
if (cachedData) return cachedData;
try {
const response = await fetch('http://www.2015888.xyz/M.json', {
cache: 'no-store', // 😍禁用缓存,确保获取最新数据
});
if (!response.ok) throw new Error(`HTTP 错误!状态码: ${response.status}`);
const data = await response.json();
cachedData = data; // 缓存数据
return data;
} catch (error) {
console.error('获取数据失败:', error);
throw error; // 抛出错误,由调用者处理
}
}
function renderOptions(data) {
const optionsList = document.getElementById('optionsList');
const inputContainer = document.getElementById('input-container');
if (optionsList.style.display === 'block') {
optionsList.style.display = 'none'; // 隐藏选项列表
optionsList.innerHTML = '';
optionsList.style.width = `${inputContainer.offsetWidth}px`;
if (data.urls && data.urls.length > 0) {
data.urls.forEach(item => {
const option = document.createElement('div');
option.classList.add('option');
option.onclick = () => selectOption(item.url);
const name = document.createElement('span');
name.textContent = item.name;
const url = document.createElement('span');
url.textContent = item.url;
url.classList.add('url');
const scrollable = document.createElement('div');
scrollable.classList.add('scrollable');
scrollable.appendChild(url);
option.appendChild(name);
option.appendChild(scrollable);
optionsList.appendChild(option);
});
} else {
const cachedData = sessionStorage.getItem('optionsData');
if (cachedData) {
// 如果有缓存数据,直接使用
updateOptionsList(JSON.parse(cachedData));
} else {
// 如果没有缓存数据,则发起请求
fetch('http://www.2015888.xyz/jiemi/M.php')
.then(response => response.json())
.then(data => {
// 将数据存储到 sessionStorage 中
sessionStorage.setItem('optionsData', JSON.stringify(data));
updateOptionsList(data);
})
.catch(error => console.error('获取数据失败:', error));
}
function updateOptionsList(data) {
optionsList.innerHTML = ''; // 清空选项列表
optionsList.style.width = `${inputContainer.offsetWidth}px`; // 设置选择框宽度
if (data.urls) {
data.urls.forEach(item => {
const option = document.createElement('div');
option.classList.add('option');
option.onclick = () => selectOption(item.url); // 点击选项时选择URL
// 创建名称和URL的HTML结构
const name = document.createElement('span');
name.textContent = item.name; // 显示名称
const url = document.createElement('span');
url.textContent = item.url; // 显示URL
url.classList.add('url'); // 添加样式类
// 添加一个包裹URL的scrollable容器
const scrollable = document.createElement('div');
scrollable.classList.add('scrollable');
scrollable.appendChild(url);
option.appendChild(name);
option.appendChild(scrollable);
optionsList.appendChild(option);
});
optionsList.style.display = 'block'; // 显示选项列表
}
}
optionsList.innerHTML = '<div class="error">无可用数据</div>';
}
}
function toggleOptions() {
const optionsList = document.getElementById('optionsList');
if (optionsList.style.display === 'block') {
optionsList.style.display = 'none';
return;
}
// 显示加载状态
optionsList.innerHTML = '<div class="loading">加载中...</div>';
optionsList.style.display = 'block';
fetchData()
.then(data => {
renderOptions(data);
})
.catch(error => {
console.error('加载失败:', error);
optionsList.innerHTML = '<div class="error">加载失败,请刷新重试</div>';
});
}
// 选择选项并更新输入框
@ -111,7 +133,7 @@ function getIPTV() {
if (xhr.status == 200) {
var response = xhr.responseText;
if (response.trim() === "") {
showErrorMessage("PHP脚本未获取到内容,请检查链接是否正确。");
showErrorMessage("脚本未获取到内容,请检查链接是否正确。");
} else {
try {
// 尝试解析JSON字符串