相关文章推荐
会开车的香菇  ·  NNG (NanoMsg ...·  5 天前    · 
无邪的消防车  ·  Flutter真机调试的时候print不输出 ...·  1 年前    · 
斯文的洋葱  ·  Selenium占用的内存太多-腾讯云开发者 ...·  1 年前    · 
很酷的手套  ·  Excel中将所有图片在单元格居中并固定大小 ...·  1 年前    · 
面冷心慈的帽子  ·  JavaScript DOM的性能优化详解 ...·  2 年前    · 
孤独的小马驹  ·  inputstream ...·  2 年前    · 
Code  ›  最简单的方式使用原生 js 发送 http 请求开发者社区
url js js代码 option
https://cloud.tencent.com/developer/article/1835769
重情义的豌豆
1 年前
王图思睿

最简单的方式使用原生 js 发送 http 请求

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
王图思睿
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 最简单的方式使用原生 js 发送 http 请求

最简单的方式使用原生 js 发送 http 请求

作者头像
王图思睿
发布 于 2021-06-16 15:36:29
13.4K 0
发布 于 2021-06-16 15:36:29
举报
文章被收录于专栏: 膨胀的面包

使用场景

1、检查接口可用性

主要用于在没有引入 jQuery 等工具的页面上需要验证一些 api 能否调得通的时候,可以快速调出浏览器调试界面发请求。 这在判断是否存在跨域问题的场景下,特别好用。

2、验证接口用于爬虫

另外,因为在浏览器调试界面发起的请求跟页面自身的 js 发起的请求是一样的,所以可以不用关心登录状态等上下文环境的问题。这在写爬虫的时候特别实用——抓到一个链接之后,直接在浏览器上进行验证,先调用一下试试好不好用再说。

3、减少依赖 因为可以直接使用原生 js,因此无需添加 jQuery、axios 等第三方工具就可以发送 http 就请求,可以减少应用的体积。

实现

简易版

代码语言: javascript
复制
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if( xhr.readyState == 4){
         if( xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){
             info.innerHTML = xhr.responseText;
// 每次需要发请求需要做两步:
xhr.open("get", url, true);
xhr.send(null);

完整版:

代码语言: javascript
复制
var http = {};
http.quest = function (option, callback) {
  var url = option.url;
  var method = option.method;
  var data = option.data;
  var timeout = option.timeout || 0;
  var xhr = new XMLHttpRequest();
  (timeout > 0) && (xhr.timeout = timeout);
  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
      if (xhr.status >= 200 && xhr.status < 400) {
        var result = xhr.responseText;
        try { result = JSON.parse(xhr.responseText); } catch (e) { }
        callback && callback(null, result);
      } else {
        callback && callback('status: ' + xhr.status);
  }.bind(this);
  xhr.open(method, url, true);
  if (typeof data === 'object') {
    try {
      data = JSON.stringify(data);
    } catch (e) { }
  xhr.send(data);
  xhr.ontimeout = function () {
    callback && callback('timeout');
    console.log('%c连%c接%c超%c时', 'color:red', 'color:orange', 'color:purple', 'color:green');
http.get = function (url, callback) {
  var option = url.url ? url : { url: url };
  option.method = 'get';
  this.quest(option, callback);
http.post = function (option, callback) {
  option.method = 'post';
  this.quest(option, callback);
//普通get请求
http.get('http://www.baidu.com', function (err, result) {
    // 这里对结果进行处理
//定义超时时间(单位毫秒)
http.get({ url: 'http://www.baidu.com', timeout: 1000 }, function (err, result) {
    // 这里对结果进行处理
 
推荐文章
会开车的香菇  ·  NNG (NanoMsg NewGeneration)メモ
5 天前
无邪的消防车  ·  Flutter真机调试的时候print不输出日志_问答-阿里云开发者社区
1 年前
斯文的洋葱  ·  Selenium占用的内存太多-腾讯云开发者社区-腾讯云
1 年前
很酷的手套  ·  Excel中将所有图片在单元格居中并固定大小_宏将插入的图片在单元格居中-CSDN博客
1 年前
面冷心慈的帽子  ·  JavaScript DOM的性能优化详解 - 知乎
2 年前
孤独的小马驹  ·  inputstream 初始化_天啦噜,项目上使用InputStream,我被坑了一把!_weixin_39929566的博客-CSDN博客
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号