日常更新: 04-13 09:41
This commit is contained in:
parent
ff22e03bae
commit
2b845e5a03
122
jm.js
122
jm.js
|
@ -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字符串
|
||||
|
|
Loading…
Reference in New Issue