Ajax教程_ajax是服务器端动态网页技术

Ajax教程_ajax是服务器端动态网页技术Ajax教程Ajax能做什么Ajax是一种异步请求数据的web开发技术,目前主要用于异步,大家都知道,浏览器主线程是单线程的,也就是一次只能干一件事,以Ajax就是让浏览器当主线程完成后去干别的事

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Ajax教程

Ajax能做什么

Ajax是一种异步请求数据的web开发技术,目前主要用于异步,大家都知道,浏览器主线程是单线程的,也就是一次只能干一件事,以Ajax就是让浏览器当主线程完成后去干别的事情,比如发送请求,加载接口数据等等.这个技术通过XMLHttpRequest对象实现,具体的机制大家可以参考浏览器的时间环机制.

Ajax的应用

以前我们在开发的时候,没有ajax,想要看另一个内容,只能让浏览器跳转到另一个页面,重新加载.导致用户体验很不好,并且由于同一个网站很多内容都一样,导致相同的内容被请求了多次,也浪费了宝贵的时间.有了Ajax,就是可以让数据在需要时候在加载,比如我有一个展示数据的表格和提交数据的表单,我们可以在提交的时候利用Ajax在不刷新页面的情况下提交到后台,之后让后台给我们一个响应结果,我们可以直接替换到原始的标签,这样用户就可以看到更新后的数据,对用户的体验页非常好

Ajax使用

原生Ajax

    // 创建Ajax
    let xhr = new XMLHttpRequest();
    // 配置请求地址和请求方式
    xhr.open("get", "http://localhost:3000/jsonData");
    // 发送请求
    xhr.send();
    // 监听事件 onload 接收完整的服务器响应数据
    xhr.onload = function () {
        console.log(xhr.responseText);
        // document.getElementsByTagName("h1")[0].innerHTML = xhr.responseText;
        // json字符串转json对象
        let resText=JSON.parse(xhr.responseText);
        document.getElementsByTagName("h1")[0].innerHTML = resText.age;

    }

这个是原生最简单的方式,其他的方式大家可以百度

目前因为使用原生的Ajax太繁琐,我们一般使用封装后的Ajax,目前常用的有Jquery的$.ajax和axios,还有原生的fetch.

Jquery Ajax

  $.ajax({
            type: "post",   //请求类型
            dataType: "json",   //请求数据返回类型
            url: "https://aliyun.firehua.top/admin/json_data/sent_data",    //请求地址
            data: $('#form').serialize(),       //表单序列化
            success: function (result) {        //成功
                console.log(result);
                if (result.code === 200) {
                    console.log(result);
                    console.log("成功");
                    $("#name").text(result.data.name);
                    $("#phone").text(result.data.phone);
                    $("#sex").text(result.data.sex);
                } else {
                    console.log(result);
                    console.log("失败");
                }
            },
            error: function (result) {      //失败
                console.log(result);
                console.log("异常");
            }
        });

作者:我的猫YMY
链接:https://juejin.im/post/6844903976782004237
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这里引用一下掘金大佬我的猫YMY的文章,具体大家可以看看,jquery也可以说比较常用,基本上写起来也还是比较简单,但是听周围的人说现在都不用jquery因为比较慢,下面就介绍介绍别的方式.

Vue axios

Vue是推荐用axios框架,这个是基于promise的,我个人感觉写起来比jquery方便,并也比较快,我比较推荐

//发送一个`POST`请求
axios({
    method:"POST",
    url:'/user/12345',
    data:{
        firstName:"Fred",
        lastName:"Flintstone"
    }
});

作者:ZHero88311
链接:https://juejin.im/post/6844903977016885255
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这里引用一下掘金大佬ZHero88311的文章,大家可以看看,这种方式看起来就比jquery的ajax要清爽,并且基本上和vue配合起来效果更佳,也不需要转换json,可以使用.then来处理响应,并且也可以编辑配置文件,如默认请求等等,还是比较方便

fetch

fetch是es6提出的一种解决方式,没有用xmlrequest,使用了原生的js,应该是速度最快的,但是兼容性可能有问题

    fetch('http://localhost:3000/data/123',
        {method:'get'}).then(data=>{
           return data.text();
        }).then(ret=>{
            console.log(ret);
        })

这个大家需要注意需要两次then才能获取到响应数据

Ajax跨域

因为浏览器的同源策略,导致一个页面只能访问自己站点的东西,访问别的服务器会报错误,这个是为了安全,所有我们需要跨域.一般常见的跨域有三种,jsonp,cors还有代理

jsonp跨域

jsonp就是动态创建一个script标签,里面请求想要的文件,一般是json数据,可以不受限制

这个是jquery的jsonp

 $.ajax({
                     url: "http://localhost:9090/student",
                     type: "GET",
                     dataType: "jsonp", //指定服务器返回的数据类型
                     success: function (data) {
                         var result = JSON.stringify(data); //json对象转成字符串
                         $("#text").val(result);
                     }
                 });

但是jsonp只能用于get请求,所有讲解下面的cors

cors跨域

cors跨域则是由服务端进行设置,一般不需要前端负责

下面是node的方式

   'Access-Control-Allow-Credentials': true, //允许后端发送cookie
      'Access-Control-Allow-Origin': req.headers.origin || '*', //任意域名都可以访问,或者基于我请求头里面的域
      'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type', //设置请求头格式和类型
      'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS',//允许支持的请求方式
      'Content-Type': 'application/json; charset=utf-8'//默认与允许的文本格式json和编码格式

代理跨域

代理跨域就是讲浏览器的请求让本站点的服务器去请求,因为服务器没有跨域概念,所有可以直接拿到

这个是vue的代码

  devServer: {
    host: 'localhost',
    port: 8081,
    proxy: {
      '/api': {
        target: 'http://mall-pre.springboot.cn',
        changeOrigin: true,
        pathRewrite: {
          '/api': ''
        }

      }
    }
  }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168059.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • delphixe5 android,Delphi XE5 Android手机端转换Ansi字符串

    delphixe5 android,Delphi XE5 Android手机端转换Ansi字符串介绍本文章介绍了DelphiXE5Android手机端转换Ansi字符串,本代码是“浙江-樵夫”开发的一个程序,用来对字符串进行转换,主要代码是://读入Ansi(简体中文)文件…procedureTForm1.CornerButton3Click(Sender:TObject);varStream:TMemoryStream;beginStream:=TMemoryStream….

    2022年7月18日
    14
  • mysql之通用二进制格式程序包安装

    mysql之通用二进制格式程序包安装

    2021年8月30日
    43
  • subscriptions_promise sb to do

    subscriptions_promise sb to do1.Promise的含义Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了P

    2022年8月7日
    5
  • linux经常使用命令

    linux经常使用命令

    2021年11月30日
    41
  • FDD与TDD的区别

    FDD与TDD的区别LTE通常分为FDDLTE和TDDLTEFDD,频分双工(FrequencyDivisionDuplexing)我和你通信,像广播一样,只能我说你听,是单工;像对讲机一样,同一时间只能一方说,另一方听,就是半双工;如果双方可以同时说和听,就是全双工。TDD:收发共用一个射频频点,上、下行链路使用不同的时隙来进行通信FDD:收发使用不同的射频频点来进行通信…

    2022年6月11日
    40
  • java输入语句怎么写_java输入语句应该怎样写?示例演示

    java输入语句怎么写_java输入语句应该怎样写?示例演示作为初步进入java开发学习的小白来说,就像是小时候刚刚学说话一样,这种经历既是必然的也是有趣的,学习java语言一开始的时候也是得一步步的学习,比如说,java输入语句应该这么去实现呢?一起跟小编来看看吧。第一步:导包。先将java.io.*;以及java.util.*;导入Java代码中。charc=(char)System.in.read();是输入单个字符;inta=cin.nextI…

    2022年7月9日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号