亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Axios請(qǐng)求超時(shí)設(shè)置無(wú)效的問題及解決方案

 更新時(shí)間:2024年12月24日 09:50:44   作者:幾何心涼  
在現(xiàn)代前端開發(fā)中,Axios 是一個(gè)廣泛使用的 HTTP 客戶端庫(kù),用于向服務(wù)器發(fā)送請(qǐng)求并處理響應(yīng),然而,有時(shí)開發(fā)者可能會(huì)發(fā)現(xiàn) Axios 的超時(shí)設(shè)置似乎無(wú)效,本文將深入探討 Axios 請(qǐng)求超時(shí)設(shè)置無(wú)效的常見原因,并提供詳細(xì)的解決方案和最佳實(shí)踐,需要的朋友可以參考下

1. 引言

在現(xiàn)代前端開發(fā)中,Axios 是一個(gè)廣泛使用的 HTTP 客戶端庫(kù),用于向服務(wù)器發(fā)送請(qǐng)求并處理響應(yīng)。為了確保應(yīng)用的健壯性和用戶體驗(yàn),開發(fā)者通常會(huì)為請(qǐng)求設(shè)置超時(shí)時(shí)間,以防止因網(wǎng)絡(luò)問題或服務(wù)器響應(yīng)緩慢導(dǎo)致的無(wú)限等待。然而,有時(shí)開發(fā)者可能會(huì)發(fā)現(xiàn) Axios 的超時(shí)設(shè)置似乎無(wú)效,導(dǎo)致請(qǐng)求在超時(shí)后仍然繼續(xù)執(zhí)行,或者超時(shí)行為未按預(yù)期觸發(fā)。本文將深入探討 Axios 請(qǐng)求超時(shí)設(shè)置無(wú)效的常見原因,并提供詳細(xì)的解決方案和最佳實(shí)踐,幫助開發(fā)者有效地配置和調(diào)試 Axios 的超時(shí)機(jī)制。

2. 理解 Axios 的超時(shí)機(jī)制

2.1 Axios 超時(shí)的工作原理

Axios 提供了一個(gè) timeout 配置選項(xiàng),用于指定請(qǐng)求的最大等待時(shí)間(以毫秒為單位)。如果請(qǐng)求在指定的時(shí)間內(nèi)未完成,Axios 將自動(dòng)中止請(qǐng)求并拋出一個(gè)超時(shí)錯(cuò)誤。

axios.get('/user/12345', {
  timeout: 5000 // 5秒超時(shí)
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  if (error.code === 'ECONNABORTED') {
    console.error('請(qǐng)求超時(shí)!');
  } else {
    console.error('請(qǐng)求失?。?, error.message);
  }
});

2.2 超時(shí)錯(cuò)誤的處理

當(dāng)請(qǐng)求超時(shí)時(shí),Axios 會(huì)拋出一個(gè)錯(cuò)誤對(duì)象,其 code 屬性為 'ECONNABORTED',并包含超時(shí)的相關(guān)信息。開發(fā)者可以通過捕獲該錯(cuò)誤來(lái)進(jìn)行相應(yīng)的處理,例如提示用戶重試或記錄日志。

3. Axios 請(qǐng)求超時(shí)設(shè)置無(wú)效的常見原因

3.1 配置錯(cuò)誤或遺漏

原因描述:未正確設(shè)置 timeout 配置選項(xiàng),或在錯(cuò)誤的位置設(shè)置了超時(shí)。

解決方案

  • 確保 timeout 配置項(xiàng)以毫秒為單位正確設(shè)置。
  • 確保 timeout 配置在正確的位置,例如全局配置或請(qǐng)求級(jí)別配置。

示例

// 全局配置
axios.defaults.timeout = 5000; // 5秒

// 請(qǐng)求級(jí)別配置
axios.get('/user/12345', {
  timeout: 5000
});

3.2 超時(shí)發(fā)生在建立連接之前

原因描述Axios 的 timeout 選項(xiàng)僅適用于請(qǐng)求的建立和響應(yīng)過程,不包括 DNS 查詢、TCP 連接建立等低層次的網(wǎng)絡(luò)操作。因此,如果問題出在這些階段,超時(shí)設(shè)置可能無(wú)法生效。

解決方案

  • 使用網(wǎng)絡(luò)代理或 VPN 進(jìn)行網(wǎng)絡(luò)調(diào)試,確保 DNS 和 TCP 連接的穩(wěn)定性。
  • 優(yōu)化服務(wù)器的網(wǎng)絡(luò)響應(yīng)時(shí)間,減少建立連接所需的時(shí)間。

3.3 使用了不支持的傳輸協(xié)議

原因描述Axios 主要支持 HTTP 和 HTTPS 協(xié)議。如果使用其他傳輸協(xié)議(如 WebSocket),timeout 設(shè)置可能不會(huì)生效。

解決方案

  • 確保請(qǐng)求使用的是 Axios 支持的 HTTP 或 HTTPS 協(xié)議。
  • 對(duì)于需要其他協(xié)議的場(chǎng)景,使用適合的客戶端庫(kù)并實(shí)現(xiàn)相應(yīng)的超時(shí)機(jī)制。

3.4 代理服務(wù)器或中間件干擾

原因描述:網(wǎng)絡(luò)中存在代理服務(wù)器、防火墻或其他中間件,可能會(huì)延遲或阻止請(qǐng)求,從而影響超時(shí)設(shè)置的效果。

解決方案

  • 檢查并配置代理服務(wù)器,確保其不會(huì)無(wú)故延遲或阻止請(qǐng)求。
  • 在必要時(shí),調(diào)整代理服務(wù)器的超時(shí)設(shè)置,使其與 Axios 的超時(shí)配置保持一致。

3.5 請(qǐng)求被攔截或修改

原因描述:使用了 Axios 的攔截器(interceptors),在請(qǐng)求或響應(yīng)階段進(jìn)行了攔截和修改,可能導(dǎo)致超時(shí)設(shè)置失效。

解決方案

  • 仔細(xì)檢查請(qǐng)求和響應(yīng)攔截器,確保它們不會(huì)意外地延遲或阻止請(qǐng)求的完成。
  • 在攔截器中處理超時(shí)邏輯,確保與 Axios 的超時(shí)機(jī)制兼容。

示例

// 請(qǐng)求攔截器
axios.interceptors.request.use(config => {
  // 例如,添加自定義頭部
  config.headers['X-Custom-Header'] = 'foobar';
  return config;
}, error => {
  return Promise.reject(error);
});

// 響應(yīng)攔截器
axios.interceptors.response.use(response => {
  // 例如,處理特定的響應(yīng)格式
  return response;
}, error => {
  // 確保超時(shí)錯(cuò)誤被正確傳遞
  return Promise.reject(error);
});

3.6 環(huán)境或庫(kù)版本不兼容

原因描述:使用的 Axios 版本與其他依賴庫(kù)或運(yùn)行環(huán)境存在兼容性問題,可能導(dǎo)致超時(shí)設(shè)置無(wú)法正常工作。

解決方案

  • 確保使用的是 Axios 的最新穩(wěn)定版本。
  • 檢查并更新其他相關(guān)庫(kù),確保它們與 Axios 兼容。
  • 在不同環(huán)境(如瀏覽器、Node.js)中測(cè)試超時(shí)設(shè)置,確認(rèn)其一致性。

3.7 使用了自定義的 Cancel Token 或其他中斷機(jī)制

原因描述:在請(qǐng)求中使用了 Axios 的 CancelToken 或其他中斷機(jī)制,可能與超時(shí)設(shè)置沖突,導(dǎo)致超時(shí)行為未按預(yù)期觸發(fā)。

解決方案

  • 確保 CancelToken 的使用不會(huì)干擾 Axios 的超時(shí)機(jī)制。
  • 在實(shí)現(xiàn)自定義中斷邏輯時(shí),明確區(qū)分超時(shí)引發(fā)的中斷和其他類型的中斷。

示例

const source = axios.CancelToken.source();

axios.get('/user/12345', {
  timeout: 5000,
  cancelToken: source.token
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  if (axios.isCancel(error)) {
    console.log('請(qǐng)求被取消:', error.message);
  } else if (error.code === 'ECONNABORTED') {
    console.error('請(qǐng)求超時(shí)!');
  } else {
    console.error('請(qǐng)求失?。?, error.message);
  }
});

// 在需要時(shí)取消請(qǐng)求
source.cancel('操作被用戶取消');

4. 解決 Axios 請(qǐng)求超時(shí)設(shè)置無(wú)效的問題

4.1 確保正確配置超時(shí)選項(xiàng)

步驟

  1. 全局配置:在 Axios 的默認(rèn)配置中設(shè)置 timeout,適用于所有請(qǐng)求。
  2. 請(qǐng)求級(jí)別配置:在單個(gè)請(qǐng)求中設(shè)置 timeout,覆蓋全局配置。

示例

// 全局配置
axios.defaults.timeout = 5000; // 5秒超時(shí)

// 請(qǐng)求級(jí)別配置
axios.get('/user/12345', {
  timeout: 10000 // 10秒超時(shí)
});

注意:請(qǐng)求級(jí)別的配置會(huì)覆蓋全局配置。

4.2 使用 Axios 實(shí)例進(jìn)行配置

步驟

  • 創(chuàng)建一個(gè) Axios 實(shí)例,并在實(shí)例中設(shè)置 timeout
  • 使用該實(shí)例發(fā)送請(qǐng)求,確保所有請(qǐng)求都應(yīng)用相同的超時(shí)設(shè)置。

示例

const axiosInstance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 5000, // 5秒超時(shí)
  headers: { 'X-Custom-Header': 'foobar' }
});

axiosInstance.get('/user/12345')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    if (error.code === 'ECONNABORTED') {
      console.error('請(qǐng)求超時(shí)!');
    } else {
      console.error('請(qǐng)求失?。?, error.message);
    }
  });

4.3 實(shí)現(xiàn)自動(dòng)重試機(jī)制

步驟

  • 當(dāng)請(qǐng)求超時(shí)時(shí),自動(dòng)嘗試重新發(fā)送請(qǐng)求。
  • 設(shè)置最大重試次數(shù),防止無(wú)限重試。

示例

function axiosWithRetry(url, options, retries = 3) {
  return axios.get(url, options).catch(error => {
    if (retries > 0 && error.code === 'ECONNABORTED') {
      console.warn(`請(qǐng)求超時(shí),正在重試... 剩余重試次數(shù):${retries}`);
      return axiosWithRetry(url, options, retries - 1);
    }
    return Promise.reject(error);
  });
}

axiosWithRetry('/user/12345', { timeout: 5000 })
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    if (error.code === 'ECONNABORTED') {
      console.error('請(qǐng)求超時(shí),所有重試均失敗!');
    } else {
      console.error('請(qǐng)求失?。?, error.message);
    }
  });

4.4 結(jié)合使用其他超時(shí)方法

步驟

  • 在 Axios 的 timeout 基礎(chǔ)上,使用 AbortController 來(lái)實(shí)現(xiàn)更細(xì)粒度的超時(shí)控制。
  • 適用于現(xiàn)代瀏覽器和 Node.js 環(huán)境。

示例

const controller = new AbortController();
const timeout = setTimeout(() => {
  controller.abort();
}, 5000); // 5秒超時(shí)

axios.get('/user/12345', {
  signal: controller.signal
})
.then(response => {
  clearTimeout(timeout);
  console.log(response.data);
})
.catch(error => {
  if (axios.isCancel(error)) {
    console.error('請(qǐng)求被取消:', error.message);
  } else {
    console.error('請(qǐng)求失?。?, error.message);
  }
});

4.5 檢查和優(yōu)化攔截器邏輯

步驟

  • 仔細(xì)檢查請(qǐng)求和響應(yīng)攔截器,確保它們不會(huì)無(wú)意中延遲請(qǐng)求或阻止超時(shí)行為。
  • 在攔截器中處理錯(cuò)誤時(shí),確保不覆蓋或忽略超時(shí)錯(cuò)誤。

示例

// 請(qǐng)求攔截器
axios.interceptors.request.use(config => {
  // 添加自定義邏輯
  return config;
}, error => {
  return Promise.reject(error);
});

// 響應(yīng)攔截器
axios.interceptors.response.use(response => {
  // 添加自定義邏輯
  return response;
}, error => {
  // 確保超時(shí)錯(cuò)誤被正確傳遞
  if (error.code === 'ECONNABORTED') {
    console.error('請(qǐng)求超時(shí)!');
  }
  return Promise.reject(error);
});

4.6 更新 Axios 和相關(guān)依賴

步驟

  • 確保使用的是 Axios 的最新穩(wěn)定版本,修復(fù)已知的超時(shí)問題。
  • 更新其他相關(guān)依賴庫(kù),確保它們與 Axios 兼容。

命令

npm install axios@latest

4.7 避免在代理或中間件中攔截超時(shí)設(shè)置

原因描述:某些代理服務(wù)器或中間件可能會(huì)修改請(qǐng)求或響應(yīng),影響 Axios 的超時(shí)行為。

解決方案

  • 檢查并配置代理服務(wù)器,確保其不會(huì)無(wú)故延遲或修改請(qǐng)求和響應(yīng)。
  • 在本地開發(fā)環(huán)境中,盡量減少使用代理或中間件,確認(rèn)問題是否由它們引起。

5. 示例實(shí)現(xiàn)

5.1 基本超時(shí)設(shè)置

代碼示例

axios.get('https://api.example.com/data', {
  timeout: 5000 // 5秒超時(shí)
})
.then(response => {
  console.log('數(shù)據(jù)接收成功:', response.data);
})
.catch(error => {
  if (error.code === 'ECONNABORTED') {
    console.error('請(qǐng)求超時(shí)!');
  } else {
    console.error('請(qǐng)求失敗:', error.message);
  }
});

5.2 使用 Axios 實(shí)例

代碼示例

const axiosInstance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 7000, // 7秒超時(shí)
  headers: { 'X-Custom-Header': 'foobar' }
});

axiosInstance.get('/data')
  .then(response => {
    console.log('數(shù)據(jù)接收成功:', response.data);
  })
  .catch(error => {
    if (error.code === 'ECONNABORTED') {
      console.error('請(qǐng)求超時(shí)!');
    } else {
      console.error('請(qǐng)求失?。?, error.message);
    }
  });

5.3 自動(dòng)重試機(jī)制

代碼示例

function axiosWithRetry(url, options, retries = 2) {
  return axios.get(url, options).catch(error => {
    if (retries > 0 && error.code === 'ECONNABORTED') {
      console.warn(`請(qǐng)求超時(shí),正在重試... 剩余重試次數(shù):${retries}`);
      return axiosWithRetry(url, options, retries - 1);
    }
    return Promise.reject(error);
  });
}

axiosWithRetry('https://api.example.com/data', { timeout: 5000 })
  .then(response => {
    console.log('數(shù)據(jù)接收成功:', response.data);
  })
  .catch(error => {
    if (error.code === 'ECONNABORTED') {
      console.error('請(qǐng)求超時(shí),所有重試均失?。?);
    } else {
      console.error('請(qǐng)求失?。?, error.message);
    }
  });

5.4 結(jié)合使用 AbortController

代碼示例

const controller = new AbortController();
const timeoutId = setTimeout(() => {
  controller.abort();
}, 5000); // 5秒超時(shí)

axios.get('https://api.example.com/data', {
  signal: controller.signal
})
.then(response => {
  clearTimeout(timeoutId);
  console.log('數(shù)據(jù)接收成功:', response.data);
})
.catch(error => {
  if (axios.isCancel(error)) {
    console.error('請(qǐng)求被取消:', error.message);
  } else {
    console.error('請(qǐng)求失?。?, error.message);
  }
});

5.5 清理攔截器

代碼示例

// 添加攔截器
const requestInterceptor = axios.interceptors.request.use(config => {
  // 添加自定義邏輯
  return config;
}, error => {
  return Promise.reject(error);
});

const responseInterceptor = axios.interceptors.response.use(response => {
  // 添加自定義邏輯
  return response;
}, error => {
  if (error.code === 'ECONNABORTED') {
    console.error('請(qǐng)求超時(shí)!');
  }
  return Promise.reject(error);
});

// 移除攔截器
axios.interceptors.request.eject(requestInterceptor);
axios.interceptors.response.eject(responseInterceptor);

6. 高級(jí)優(yōu)化建議

6.1 動(dòng)態(tài)設(shè)置超時(shí)

場(chǎng)景:根據(jù)請(qǐng)求的性質(zhì)或優(yōu)先級(jí),動(dòng)態(tài)調(diào)整不同請(qǐng)求的超時(shí)時(shí)間。

代碼示例

function fetchData(endpoint, isCritical = false) {
  const timeout = isCritical ? 10000 : 5000; // 關(guān)鍵請(qǐng)求超時(shí) 10秒,其他請(qǐng)求 5秒

  return axios.get(endpoint, { timeout })
    .then(response => response.data)
    .catch(error => {
      if (error.code === 'ECONNABORTED') {
        console.error(`請(qǐng)求 ${endpoint} 超時(shí)!`);
      } else {
        console.error(`請(qǐng)求 ${endpoint} 失?。篳, error.message);
      }
      throw error;
    });
}

fetchData('/critical-data', true)
  .then(data => {
    console.log('關(guān)鍵數(shù)據(jù)接收成功:', data);
  })
  .catch(error => {
    // 處理錯(cuò)誤
  });

6.2 使用自定義超時(shí)邏輯

場(chǎng)景:在 Axios 的基礎(chǔ)上,結(jié)合自定義邏輯實(shí)現(xiàn)更復(fù)雜的超時(shí)控制,例如基于條件的超時(shí)取消。

代碼示例

function fetchWithCustomTimeout(url, options, conditionFn, timeout = 5000) {
  const controller = new AbortController();
  const timeoutId = setTimeout(() => {
    controller.abort();
  }, timeout);

  return axios.get(url, {
    ...options,
    signal: controller.signal
  })
  .then(response => {
    clearTimeout(timeoutId);
    if (conditionFn(response.data)) {
      return response.data;
    } else {
      throw new Error('條件不滿足');
    }
  })
  .catch(error => {
    clearTimeout(timeoutId);
    throw error;
  });
}

fetchWithCustomTimeout(
  '/data',
  {},
  data => data.isValid === true,
  7000 // 7秒超時(shí)
)
.then(data => {
  console.log('數(shù)據(jù)接收成功且條件滿足:', data);
})
.catch(error => {
  if (error.code === 'ECONNABORTED') {
    console.error('請(qǐng)求超時(shí)!');
  } else {
    console.error('請(qǐng)求失敗或條件不滿足:', error.message);
  }
});

6.3 集成重試庫(kù)

場(chǎng)景:使用第三方重試庫(kù)(如 axios-retry)實(shí)現(xiàn)更智能的重試機(jī)制,包括指數(shù)退避和錯(cuò)誤過濾。

代碼示例

import axios from 'axios';
import axiosRetry from 'axios-retry';

// 配置 Axios 重試
axiosRetry(axios, {
  retries: 3, // 最大重試次數(shù)
  retryDelay: (retryCount) => {
    return retryCount * 1000; // 每次重試延遲增加
  },
  retryCondition: (error) => {
    // 只在超時(shí)或網(wǎng)絡(luò)錯(cuò)誤時(shí)重試
    return axiosRetry.isNetworkOrIdempotentRequestError(error) || error.code === 'ECONNABORTED';
  },
});

// 發(fā)起請(qǐng)求
axios.get('https://api.example.com/data', { timeout: 5000 })
  .then(response => {
    console.log('數(shù)據(jù)接收成功:', response.data);
  })
  .catch(error => {
    if (error.code === 'ECONNABORTED') {
      console.error('請(qǐng)求超時(shí),所有重試均失??!');
    } else {
      console.error('請(qǐng)求失?。?, error.message);
    }
  });

6.4 結(jié)合使用 Web Workers

場(chǎng)景:在處理大量數(shù)據(jù)或復(fù)雜計(jì)算時(shí),使用 Web Workers 將超時(shí)檢測(cè)邏輯從主線程分離,避免阻塞 UI。

代碼示例

// worker.js
self.onmessage = function(e) {
  const { url, timeout } = e.data;
  
  fetch(url)
    .then(response => response.json())
    .then(data => {
      self.postMessage({ status: 'success', data });
    })
    .catch(error => {
      self.postMessage({ status: 'error', error: error.message });
    });

  // 超時(shí)處理
  setTimeout(() => {
    self.postMessage({ status: 'timeout' });
  }, timeout);
};

// main.js
const worker = new Worker('worker.js');

worker.postMessage({ url: 'https://api.example.com/data', timeout: 5000 });

worker.onmessage = function(e) {
  const { status, data, error } = e.data;
  
  if (status === 'success') {
    console.log('數(shù)據(jù)接收成功:', data);
  } else if (status === 'timeout') {
    console.error('請(qǐng)求超時(shí)!');
  } else if (status === 'error') {
    console.error('請(qǐng)求失?。?, error);
  }
};

7. 總結(jié)

Axios 的超時(shí)設(shè)置是確保應(yīng)用在網(wǎng)絡(luò)不穩(wěn)定或服務(wù)器響應(yīng)緩慢時(shí)保持健壯性的關(guān)鍵配置。然而,若超時(shí)設(shè)置無(wú)效,可能會(huì)導(dǎo)致請(qǐng)求無(wú)限等待或錯(cuò)誤處理不當(dāng),從而影響用戶體驗(yàn)。通過理解 Axios 超時(shí)機(jī)制的工作原理,識(shí)別常見的配置和環(huán)境問題,并采用適當(dāng)?shù)慕鉀Q方案和最佳實(shí)踐,開發(fā)者可以有效地配置和調(diào)試 Axios 的超時(shí)行為。

關(guān)鍵措施包括

  • 正確配置超時(shí)選項(xiàng):確保 timeout 設(shè)置在正確的位置,并以毫秒為單位。
  • 使用 Axios 實(shí)例:集中管理配置,避免配置遺漏。
  • 實(shí)現(xiàn)自動(dòng)重試機(jī)制:提高請(qǐng)求的魯棒性,處理偶發(fā)的網(wǎng)絡(luò)問題。
  • 結(jié)合使用其他超時(shí)方法:如 AbortController,實(shí)現(xiàn)更細(xì)粒度的控制。
  • 優(yōu)化攔截器邏輯:確保攔截器不會(huì)干擾超時(shí)行為。
  • 更新 Axios 和相關(guān)依賴:保持使用最新的穩(wěn)定版本,避免已知的兼容性問題。
  • 避免代理或中間件干擾:確保網(wǎng)絡(luò)環(huán)境支持 Axios 的超時(shí)設(shè)置。
  • 監(jiān)控和調(diào)試:使用開發(fā)者工具和日志,實(shí)時(shí)監(jiān)控請(qǐng)求的超時(shí)行為,及時(shí)發(fā)現(xiàn)和解決問題。

以上就是Axios請(qǐng)求超時(shí)設(shè)置無(wú)效的問題及解決方案的詳細(xì)內(nèi)容,更多關(guān)于Axios請(qǐng)求超時(shí)設(shè)置無(wú)效的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Nest.js實(shí)現(xiàn)接口教程示例

    使用Nest.js實(shí)現(xiàn)接口教程示例

    這篇文章主要為大家介紹了使用Nest.js實(shí)現(xiàn)接口教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 原生js實(shí)現(xiàn)圖片輪播特效

    原生js實(shí)現(xiàn)圖片輪播特效

    這篇文章主要介紹了原生js實(shí)現(xiàn)圖片輪播特效,適合用于商品展示,實(shí)現(xiàn)最簡(jiǎn)單的廣告輪播效果,感興趣的小伙伴們可以參考一下
    2015-12-12
  • JavaScript Pinia代替 Vuex的可行性分析

    JavaScript Pinia代替 Vuex的可行性分析

    這篇文章主要介紹了JavaScript中Pinia是否可以代替Vuex,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • js實(shí)現(xiàn)隨機(jī)點(diǎn)名器精簡(jiǎn)版

    js實(shí)現(xiàn)隨機(jī)點(diǎn)名器精簡(jiǎn)版

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)隨機(jī)點(diǎn)名器的精簡(jiǎn)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • javascript使用數(shù)組的push方法完成快速排序

    javascript使用數(shù)組的push方法完成快速排序

    排序的方法有很多,本節(jié)為大家介紹的是使用數(shù)組的push方法完成快速排序,當(dāng)然你也可以舉一反三
    2014-09-09
  • js實(shí)現(xiàn)百度登錄窗口拖拽效果

    js實(shí)現(xiàn)百度登錄窗口拖拽效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)百度登錄窗口拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • JavaScript中子對(duì)象訪問父對(duì)象的方式詳解

    JavaScript中子對(duì)象訪問父對(duì)象的方式詳解

    js中雖然沒有傳統(tǒng)面向?qū)ο蟮木幊陶Z(yǔ)言里子類訪問父類的特殊語(yǔ)法,但是我們可以根據(jù)需要造一個(gè),接下來(lái)本文給大家分享在JavaScript中子對(duì)象訪問父對(duì)象的方式,需要的朋友可以參考下
    2016-09-09
  • 淺談Webpack 持久化緩存實(shí)踐

    淺談Webpack 持久化緩存實(shí)踐

    這篇文章主要介紹了淺談Webpack 持久化緩存實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-03-03
  • JS實(shí)現(xiàn)向iframe中表單傳值的方法

    JS實(shí)現(xiàn)向iframe中表單傳值的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)向iframe中表單傳值的方法,涉及js針對(duì)頁(yè)面元素及表單屬性操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-03-03
  • 深入理解JavaScript系列(3) 全面解析Module模式

    深入理解JavaScript系列(3) 全面解析Module模式

    Module模式是JavaScript編程中一個(gè)非常通用的模式,一般情況下,大家都知道基本用法,本文嘗試著給大家更多該模式的高級(jí)使用方式
    2012-01-01

最新評(píng)論