原生JS实现Ajax及Ajax的跨域请求

小说:挣钱平台作者:建通通更新时间:2019-04-24字数:22798

泰坦巨蟒本身可以说是海贼王世界里面的诸多蛇方面的动物系恶魔果实里面的蛇中王者了,所以这一招皇蛇是以他自身来齐名的,起步于六式,脱胎于六式,也超越了六式。

单位上下班时间证明

但这个汤军长的小老乡江师长却不这样认为,他觉得以自己的加强团和坦克大队,是应该能够在此地守住的,而一旦战斗打响,后面的汤军长主力必定会赶来救援的,到那时候再由坦克前导想鬼子发起反击,才是稳妥的办法,而且这种办法伤亡也比主动攻击鬼子要少得多的,最主要的是这些被汤军长视为宝贝的坦克大队就能少受些损失的。
只见巴基被打飞出去的双手忽然回来,虽然现在还觉得生疼无比,但是这种时候他管不了那么多了,双手直接飞到了刘皓的脚下直接捉住了刘皓的双腿然后在空中回转直接撞向地面。

打仗没有兵不行,虽然各地农民纷纷暴动反抗大元暴‘政,不过各地起义的力量几十股,多半是当日黄河泛滥无处容身的难民,现在大多有了归属,自己总不能挖人家墙角去啊。

  前  言

        

 如今,从事前端方面的程序猿们,如果,不懂一些前后台的数据交互方面的知识的话,估计都不太好意思说自己是程序猿。当然,如今有着许多的框架,都有相对应的前后台数据交互的方法。

而,其中,用得最多的应该苏算是JQuery的Ajax了。但是,今天,影子向大家介绍的是原生js的Ajax,及跨域请求。

 



一、 JQuery的Ajax

首先,先回忆下JQuery的Ajax写法:

$.ajax({
    url: ,
    type: "",
    dataType: "",
    data: {
          
    },
    success: function(){
         
    },
    error: function(){
          
    }
 })

 

二、原生JS实现Ajax
// 第一步: 获得XMLHttpRequest对象
            var ajax = new XMLHttpRequest();
            // 第二步: 设置状态监听函数
            ajax.onreadystatechange = function(){
                console.log(ajax.readyState);
                console.log(ajax.status);
                // 第五步:在监听函数中,判断readyState=4 && status=200表示请求成功
                if(ajax.readyState==4 && ajax.status==200){
                    // 第六步: 使用responseText、responseXML接受响应数据,并使用原生JS操作DOM进行显示
                    console.log(ajax.responseText);
                    console.log(ajax.responseXML);// 返回不是XML,显示null
                    console.log(JSON.parse(ajax.responseText));
                    console.log(eval("("+ajax.responseText+")"));
                }
            }
            // 第三步: open一个链接
            ajax.open("GET","h51701.json",false);//true异步请求,false同步
            
            // 第四步: send一个请求。 可以发送对象和字符串,不需要传递数据发送null
            ajax.send(null);


注释:

1. open(method, url, async) 方法需要三个参数:

  method:发送请求所使用的方法(GET或POST);与POST相比,GET更简单也更快,并且在大部分情况下都能用;然而,在以下情况中,请使用POST请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

 url:规定服务器端脚本的 URL(该文件可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件,比如 .asp 和 .php (在传回响应之前,能够在服务器上执行任务));

 async:规定应当对请求进行异步(true)或同步(false)处理;true是在等待服务器响应时执行其他脚本,当响应就绪后对响应进行处理;false是等待服务器响应再执行。

2. send() 方法可将请求送往服务器。

3. onreadystatechange:存有处理服务器响应的函数,每当 readyState 改变时,onreadystatechange 函数就会被执行。

4. readyState:存有服务器响应的状态信息。

  • 0: 请求未初始化
  • 1: 服务器连接已建立
  • 2: 请求已接收
  • 3: 请求处理中
  • 4: 请求已完成,且响应已就绪

5. responseText:获得字符串形式的响应数据。

 


 eval() 和JSON.parse() 

另外,给大家介绍两种解析字符串的方法:

eval() :

    eval函数用于将字符串中的JS代码解析出来并执行!!     
      当使用eval函数解析JSON字符串时,需 要在函数内部将JSON字符串用()拼接
        例如:  eval("("+json1+")")
        表示eval函数中的字符串不是用于执行,而是要进行字符串解析
       即:
        eval("("+json1+")") = JSON.parse(json1;

 

JOSN.parse() :

  纯粹的将JSON字符串解析为数组或对象;

四、 Ajax的跨域请求

 
首先,我们得知道 为什么会有跨域请求这回事,以及什么情况下会有跨域请求?

 

同源策略

同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。

它的定义是:

  一段脚本向后台请求数据,只能读取属于同一协议名、同一主机名、同一端口号下的数据;

  所以,请求不同协议名、不同端口号、不同主机名下面的文件时,
       将会违背同源策略,无法请求成功,需要进行跨越处理!!

2解决跨域请求的方法


 

方法一:后台PHP进行设置

 

前台无需任何设置,在后台被请求的PHP文件中,写入一条header

   header("Access-Control-Allow-Origin:*");

   --- 表示允许哪些域名请求这个PHP文件,*表示所有域名都允许

JS代码:

 

          

注释:

  其中,url为PHP文件的路径;

PHP代码:

          

结果:

  

 

方法二 :使用SRC属性 + jsonp实现跨域


实现步骤:   

    1、原有src属性的标签子带跨域功能;所以可以使用script标签的src属性请求后台数据

        <script src="http://127.0.0.1/json.php">< /script>

      2、用于src在加载数据成功后,会直接将加载的内容放到script标签中;

         所以,后台直接返回JSON字符串将不能在script标签中解析。

         因此,后台应该返回给前台一个回调函数名,并将JSON字符串作为参数传入。

          后台PHP文件中返回: echo "callback({$json})";

       3、前台接收到返回的回调函数,将直接在script标签中调用。因此,需要声明这样一个回调函数,作为请求成功的回调

  function callback(data){

  alert("请求成功!!");

  console.log(data);

  }

 

JS代码:

            

            

 

 

PHP文件:

            

结果:

            

 


方法三 :JQuery的Ajax实现jsonp

 

  1、在ajax请求时,设置dataType为"jsonp";

       2、后台返回时,依然需要返回回调函数名,但是,ajax在发送请求时,会默认使用get请求将回调函数名发给后台,

       后台$_GET["callback"] 取出函数名:

         ---   echo "{$_GET["callback"]}({$str})";

       3、后台返回以后,前台就可以使用ajax的success函数作为成功的回调

         ---    success : function(data){}

 

 js代码:

        

 

PHP文件:         

 

          

结果:

  

当然,后台也可以随便返回一个函数名,前台只要请求成功,就会自动调用这个函数。类似第二条的②、③步,而不需要本方法的第③步

 PHP返回: echo "callback({$str})";

  JS代码:  function callback(data){

        console.log(data);

      }

js代码:

        

 

PHP文件:

          

结果:

        

虽然,影子是一名web前端工程师,但是,影子中的觉得关于数据交互这一块,对我们这一群人来说,要用的地方还是,比较多的;况且,就算是用不到,多一技傍身也是,不错的;

好了,今天,影子的分享,就到这里结束了,感谢大家的支持!!!!

编辑:王帝顺

发布:2019-04-24 00:35:18

当前文章:http://scycxh.com/cpwyc/49703.html

此标题包含夸大误导信息 网络灰色收入路子qq群 大学生创业计划书关于app 兼职猫多少钱可以提现? 玩赚联盟证券是骗局吗? 入驻美团现在需要收费 青岛公务员上班时间 胖财猪app赚佣金骗局

10742 19145 70681 94356 89394 3881614857 75597 20099

我要说两句: (0人参与)

发布