美文网首页前端
前端ajax实现和跨域实现

前端ajax实现和跨域实现

作者: 煮黑豆 | 来源:发表于2019-11-27 12:59 被阅读0次

    下面是用chrome实现ajax请求,并对ajax中get和post请求进行封装,最后对跨域请求的前端处理
    本文用的idea工具
    首先新建一个html页面,和一个数据文件
    html和js代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <!--https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2019-11-27&leftTicketDTO.from_station=SHH&leftTicketDTO.to_station=BJP&purpose_codes=ADULT-->
    <body>
    <script>
     var xml=new XMLHttpRequest();
     xml.open("get","./data.txt");
     xml.send();
     xml.onreadystatechange=function (ev) {
         if(xml.readyState==4 && xml.status==200){
           console.log( xml.response) ;
         }
     }
    </script>
    </body>
    </html>
    

    data.txt文件

    [{
    "name":"chen",
    "age":"12"
    },{
    "name":"zhou",
    "age":"18"
    },{
    "name":"wang",
    "age":"21"
    }]
    

    文件目录结构

    image.png

    启动浏览器:即可在控制台看到


    image.png

    说明实现成功。
    在script把get改为post


    image.png
    同样返回结果。
    那下面对get和post请求封装一个方法
     function ajax(url,data,method,cb) {
         var xml=new XMLHttpRequest();
         if(method=="get"){
             if(data){
                 url+="?";
                 url+=data;
             }
             xml.open(method,url);
             xml.send();
         }else {
             xml.open(method,url);
             if(data){
                 xml.send(data)
             }else {
                 xml.send();
             }
         }
         xml.onreadystatechange=function (ev) {
             if(xml.readyState==4 && xml.status==200){
                 console.log( xml.response) ;
             }
         }
     }
    

    以上最终实现了ajax的封装,不过没有兼容IE浏览器,对于IE用ActiveXObject即可
    在script标签中直接调用

    ajax("./data.txt",null,"get",function (data) {
         console.log("==========");
         console.log(data);
     })
    

    但是对于下面跨域请求

    // https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2019-11-27&leftTicketDTO.from_station=SHH&leftTicketDTO.to_station=BJP&purpose_codes=ADULT
    
    ajax("./https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2019-11-27&leftTicketDTO.from_station=SHH&leftTicketDTO.to_station=BJP&purpose_codes=ADULT",null,"get",function (data) {
         console.log("==========");
         console.log(data);
     })
    

    会报

    image.png 跨域请求错误。
    请求必须保证协议、域名和端口号一致才可以,否则会报跨域
    那如何解决这个问题呢?
    用src属性可以解决。都有谁有src属性呢?
    img标签,script标签和iframe 标签

    相关文章

      网友评论

        本文标题:前端ajax实现和跨域实现

        本文链接:https://www.haomeiwen.com/subject/avkpwctx.html