原生js的ajax和解决跨域的jsonp(实例讲解)


Posted in Javascript onOctober 16, 2017

最近慢慢感觉,学再多框架,库,都不如老老实实先把基础弄扎实了。

不说废话,先上一个用ajax请求下本地的一个.txt文件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script>
    window.onload =function(){
      var oBtn = document.getElementById('btn');

      oBtn.onclick = function(){
        //创建XHR对象
        var xhr = new XMLHttpRequest();

        //请求的方式,地址,是否异步
        xhr.open('get','test.txt',true);

        //请求的确定操作,初始化,相当于搜索时,敲击的回车
        xhr.send(null);

        //请求的readyState每变化一次就执行一次onreadystatechange函数
        //其中readyState表示的是:请求/响应过程的当前活动阶段
        //readyState有如下取值
        /*
        *  0:未初始化,尚未调用send()方法
        *  1: 启动
        *  2:发送
        *  3:接收
        *  4:完成
        */
        xhr.onreadystatechange =function(){
          if(xhr.readyState ==4){
            alert(xhr.responseText);
          }
        }
      };


    };
  </script>
</head>
<body>
<input type="button" id="btn" value="show">
</body>
</html>

执行效果如下,点击show就会通过ajax请求本地的.txt文件。

原生js的ajax和解决跨域的jsonp(实例讲解)

代码比较简单,加上注释,相信很容易就看得懂。

但是工作中我们经常会请求其他域下的资源(因为同源策略),这个时候就遇到了跨域(协议,端口,域名任何一个不同就算是跨域)。

解决跨域的一种常用办法就是jsonp,虽然他有局限性(只支持get请求),不过优点是兼容老式浏览器(不过现在好像很少有人在意老式浏览器了)。

jsonp的基本原理:就是通过动态创建script标签,script标签的src是没有跨域限制的。

接下来上一个类似百度搜索下拉的页面

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    *{
      margin: 0;
      padding: 0;
    }
    input{
      width:300px;
      height:30px;
      border:1px solid lightgray;
      margin-top: 150px;
      margin-left: 200px;
      padding-left: 5px;
    }
    ul{
      width:307px;
      list-style: none;
      margin-left: 200px;
      display: none;
    }
    li{
      height:30px;
      border: 1px solid lightgray;
      line-height: 30px;
      padding-left: 5px;
    }
  </style>
  <script>
    function callbackD(response){
      var oUl = document.getElementById('ulList');
      var html='';
      if(response.s.length !=0){
        oUl.style.display='block';
        for(var i = 0;i<response.s.length;i++){
          html+='<li>'+response.s[i]+'</li>'
        }
      }
      oUl.innerHTML = html;
    }
  </script>
  <script>
    window.onload = function(){
      //获取dom元素
      var oData = document.getElementById('inputSearch');
      var oUl = document.getElementById('ulList');

      //键盘按下后抬起触发事件(onkeyup)
      oData.onkeyup = function(){
        if(oData.value != ''){
          //创建标签(createElement)
          var script = document.createElement("script");
          //添加地址
          script.src='http://unionsug.baidu.com/su?wd='+this.value+'&p=3&cb=callbackD';
          //添加给body的(成为body包涵的孩子)
          document.body.appendChild(script);
        }else{
          oUl.style.display='none';
        }

      }

    };
  </script>
</head>
<body>
<input type="text" id="inputSearch">
<ul id="ulList">
  <li>123</li>
</ul>
</body>
</html>

执行效果如下:

原生js的ajax和解决跨域的jsonp(实例讲解)

代码也相对比较简单,加上代码的注释,一定很容易看懂,这就是解决跨域的一种常用办法,其他有反向代理,CORS啊等等,等我学好再整理出来。

以上这篇原生js的ajax和解决跨域的jsonp(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
传智播客学习之JavaScript基础篇
Nov 13 Javascript
js 复制或插入Html的实现方法小结
May 19 Javascript
javascript学习笔记(十九) 节点的操作实现代码
Jun 20 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
Apr 02 Javascript
JavaScript var声明变量背后的原理示例解析
Oct 12 Javascript
js随机生成26个大小写字母
Feb 12 Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
Feb 14 Javascript
iframe高度自适应及隐藏滚动条的实例详解
Sep 29 Javascript
实例详解带参数的 npm script
May 28 Javascript
解决layer.confirm选择完之后消息框不消失的问题
Sep 16 Javascript
Vue.js标签页组件使用方法详解
Oct 19 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 #Javascript
Vue 2.0学习笔记之Vue中的computed属性
Oct 16 #Javascript
angular4中关于表单的校验示例
Oct 16 #Javascript
原生JS实现小小的音乐播放器
Oct 16 #Javascript
jQuery实现简单的回到顶部totop功能示例
Oct 16 #jQuery
老生常谈JavaScript面向对象基础与this指向问题
Oct 16 #Javascript
echarts饼图扇区添加点击事件的实例
Oct 16 #Javascript
You might like
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
jquery 3D球状导航的文章分类
2010/07/06 Javascript
获取body标签的两种方法
2011/10/13 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
Python 面向对象 成员的访问约束
2008/12/23 Python
Python内置函数dir详解
2015/04/14 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
python-opencv颜色提取分割方法
2018/12/08 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
秋季运动会广播稿大全
2014/02/17 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
医院见习报告范文
2014/11/03 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
分家协议书范本
2016/03/22 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python