Ajax使用

news2024/11/25 4:48:52

简介:

        全称:Asynchronous JavaScript And XML

        中文名:异步js与XML

        作用:网页使用JavaScript脚本实现前端与服务器的异步交互技术,可以在不刷新网页的前

                提下实现和服务器的数据交互

      注意:ajax不是一种编程语言,而是使用JS的一种技术。

使用步骤

步骤:

        1. 创建网络通讯对象

        2. 打开连接

        3. 设置回调

        4. 发送请求

1.创建网络通讯对象

var ajax = new ActiveXObjet("Microsoft.XMLHTTP");//ie7以下

var ajax = new XMLHttpRequest();//ie7以上,现在大多数浏览器都是这样

兼容问题,所以才有以上两种方法

        使用一个属性用来区分浏览器

                        window的XMLHttpRequest属性,ie7以下都没有

例:

 var areq;
        if(window.XMLHttpRequest){//判断是否有该属性,用来区分不同的浏览器
           areq= new XMLHttpRequest();//
        }else{
           areq = new ActiveXObject("Microsoft.XMLHTTP");//
        }

2.打开连接

方法:

        open(method,url,asyn)

                method表示异步请求的请求方式 (GET|POST)

                url 异步请求的目标路径

                asyn 是否异步(true异步,false同步),一般都是异步,同步的话页面就会一个一个的进行下去,给客户端的效果为一卡一卡的

GET请求:

ajax.open("GET","url?key=value&key2=value2",true)

POST请求:

ajax.open("POST","url",true);
/*
注意:POST请求如果想像标签一样上传数据,需要在打开连接后,发起请求前设置请求头,
如
ajax.setRequestHeader("Content-type","application/x-www-formurlencoded");
传参
1,在发起请求时填入上传的参数
2,与GET相同,将上传的参数追加到url的尾部
*/

3.设置回调

语法: ajax.onreadystatechange = function (ev1) {

                }

        注意:当请求状态发送改变时就会调用

        请求状态:

                        0 表示ajax请求对象完成创建但并未初始化

                        1 表示ajax请求对象完成初始化但未发送请求

                        2 表示ajax请求已经发送并到达服务器

                        3 表示服务器正在处理ajax请求(通信....)

                        4 表示服务器正处理完成,ajax请求对象已经成功获取响应结果

        获取服务器响应内容:

ajax.responseText//获取字符传响应数据

ajax.responseXML//获取XML格式响应数据

ajax.readyState//  获取请求状态

ajax.status//  获取当前响应码

例如:

  ajax.onreadystatechange=function (ev1) {
            if (!(ajax.readyState == 4 && agax.status == 200)) {
            } else {
                alert(agax.responseText);//弹框弹一下当前请求状态
            }
        }

4.发送请求

get请求 显示请求

ajax.send(null);

post请求  隐式请求


ajax.send(null); //不带参数

ajax.send("key1=value1&key2=value2")//带参,仅支持POST请求

例:不跳转页面,使用服务器在此页面弹窗上打印服务器收到

   request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");


        PrintWriter writer = response.getWriter();
        writer.print("服务器收到");
        writer.flush();
        writer.close();


响应写入服务器收到
<body>
<input type="button" value="发起get" id="btn" />
</body>

<script type="text/javascript">
    var btn = document.getElementById("btn")//得到按钮对象
    btn.onclick = function (ev) {//给按钮设置点击事件
        var areq;
        if(window.XMLHttpRequest){
           areq= new XMLHttpRequest();//创建ajax对象
        }else{
            areq = new ActiveXObject("Microsoft.XMLHTTP");
        }
        areq.open("GET","testjaxget",true)//打开链接
        areq.onreadystatechange=function (ev1) {//设置回调
            if (areq.readyState == 4 && areq.status == 200) {
                alert(areq.responseText);//获取到服务器响应数据,打印到弹框上
            }
        }
        areq.send(null);
    }
</script>

 例2:用户输入的内容经过服务器处理,打印到当前页面

带值:1.前端代码               

<body>
<div id="box1">
<input type="text" id="name">
    <input type="text" id="sex">
    <span id="box2"> 提交</span>
    </div>
<p id="text"></p>
</body>

2.后端

  request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String n = request.getParameter("n");//获取前端数据
        String s = request.getParameter("s");//获取前端数据
        String string = "姓名:"+n+"---性别:"+s;//拼接处理
        PrintWriter writer = response.getWriter();//
        writer.print(string);//将其打印到前端,没用ajax会创建新页面
        writer.flush();
        writer.close();

3.js

<script type="text/javascript">
    var btn02= document.getElementById("box2");
    btn02.onclick = function (ev) {
        var ajax = new XMLHttpRequest();
        var name = document.getElementById("name").value;//获取name框的对象
        var sex =  document.getElementById("sex").value;//获取sex框对象
        ajax.open("GET","S2?n="+name+"&s="+sex,true);
        ajax.onreadystatechange = function (ev1) {
            if(ajax.readyState==4&&ajax.status==200){
                var text =  ajax.responseText;
                var p = document.getElementById("text");
                p.innerHTML = text;
            }
        }
        ajax.send(null);
    }
</script>

 例3:使用post

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="text" placeholder="请输入账号" id="name">
<br/>
<input type="password" placeholder="请输入密码" id="pass">
<br/>
<span id="btn">登录</span>
</body>
<script type="text/javascript">
    var btn = document.getElementById("btn");
    btn.onclick = function (ev) {
        var use = document.getElementById("name").value;
        var pass = document.getElementById("pass").value;
        var ajax = new XMLHttpRequest();
        ajax.open("POST","s3",true);
        ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        //当为post请求,上传数据时得这样
        ajax.onreadystatechange=function (ev1) {
            if(ajax.status==200&&ajax.readyState==4){
                var test = ajax.responseText;
                alert(test);
            }
        }
        ajax.send("name="+use+"&pass="+pass);//只有post请求可以这样传参
    }
    </script>
</html>

后端 

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        String name = request.getParameter("name");
       String pass = request.getParameter("pass");
        PrintWriter writer = response.getWriter();
        if(name == null || "".equals(name)){
           writer.print("请输入账号");
            writer.flush();
            writer.close();
            return;
       }
        if(pass == null || "".equals(pass)){
            writer.print("请输入密码");
            writer.flush();
            writer.close();
            return;
        }

        if("纳西妲".equals(name)&&"123".equals(pass)){
            writer.print("登录成功");
        }else{
            writer.print("登录失败");
        }

        writer.flush();
        writer.close();

    }

JSON

简介

全称:JavaScript Object Notation

中文名:JS对象简谱

特点:

                一种轻量级的数据交换格式

                一种特殊的字符串.方便了机器进行解析和生成

                相较原来的XML格式数据,JSON数据的解析占用内存少,效率高

        作用:前后端之间、不同语言之间进行数据交互所遵守的一种数据的格式

格式

1.键值

        键值之间使用冒号连接,多个键值对之间使用逗号连接

        如:

"name":"宵宫","sex":"女","age":22

2. 对象或字典

        使用{  }表示

{name: '宵宫', sex: '女', age: 22}

    3.集合

使用[ ] 表示

[{"name":"影","sex":"女","age":4000},{"name":"宵宫","sex":"女","age":22},{"name":"优菈","sex":"女","age":24}]

   格式转换

js转为json

普通对象转化为json

关键方法

  var stu ={
        "name":"纳西妲",
        "sex":"女",
        "age":500
    }
  
    var jsonstu = JSON.stringify(stu);//转化

    console.log(jsonstu.name);


列表对象转换为JSON

function  God(name,sex,age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    var p1 = new God("影","女",4000);
    var p2 = new God("宵宫","女",22);
    var p3 = new God("优菈","女",24);

    var list = [];
    list[0] = p1;
    list[1] = p2;
    list[2] = p3;

    var json = JSON.stringify(list);
    console.log(json);

json转为js 

json转化为对象

var jsonstu = {name: '影', sex: '女', age: 4000};
var stu = eval("("+jsonstu+")")

json转为列表

   var jsons=[{"name":"影","sex":"女","age":4000},{"name":"宵宫","sex":"女","age":22},            
    {"name":"优菈","sex":"女","age":24}]

    var list = eval("("+json+")");
    console.log(list[1]);

java转为json

三方包,有不少,试试GSON

对象转为json

User user = new User("纳西妲","女",500);
        Gson gson = new Gson();
        String s = gson.toJson(user);
        System.out.println(s);//普通对象

集合转json 

 User user2 = new User("影","女",4500);
        User user3 = new User("凝光","女",29);
        User user4 = new User("九条","女",27);
        ArrayList<User> users = new ArrayList<>();
        users.add(user);
        users.add(user2);
        users.add(user3);
        users.add(user4);
        Gson gson1 = new Gson();
        String userlist = gson1.toJson(users);
        System.out.println(userlist);

 字典转json

HashMap<Integer, User> userHashMap = new HashMap<>();
        userHashMap.put(1,user);
        userHashMap.put(2,user2);
        userHashMap.put(3,user3);
        Gson gson2 = new Gson();
        String userMap = gson2.toJson(userHashMap);
        System.out.println(userMap);

json转java 

JSON字符串转换为普通对象

String json = "{\"name\":\"纳西妲\",\"sex\":\"女\",\"age\":500}";
User u =gson.fromJson(json,User.class);

JSON字符串转换为集合

String json = "[{\"name\":\"纳西妲\",\"sex\":\"女\",\"age\":500},{\"name\":\"影\",\"sex\":\"女\",\"age\":4500},{\"name\":\"凝光\",\"sex\":\"女\",\"age\":29},{\"name\":\"九条\",\"sex\":\"女\",\"age\":27}]";

Type type = new TypeToken<ArrayList<User>>(){}.getType();//获取类型
ArrayList<User> us = gson.fromJson(json, type);

json转为字典

String json = "{\"1\":{\"name\":\"纳西妲\",\"sex\":\"女\",\"age\":500},\"2\":{\"name\":\"影\",\"sex\":\"女\",\"age\":4500},\"3\":{\"name\":\"凝光\",\"sex\":\"女\",\"age\":29}}";

Type type = new TypeToken<Map<String,User>>(){}.getType();//获取类型
Map<String,User> m = gson.fromJson(json, type);

注意: 1,实体类中必须提供无参构造函数

         2,实体类中属性名必须与key值相同

          3.约定后端给前台返回数据时,需要设置响应的数据类型为application/json

response.setContentType("application/json;charset=UTF-8");

前端存值

cookie

localStorage

//存值
localStorage.setItem("name","德玛");

//取值
var name = localStorage.getItem("name");

//删除
localStorage.removeItem("name");

//修改,key值相同即为修改
localStorage.setItem("name","小明");

//清空
localStorage.clear()


sessionStorage

//存值
sessionStorage.setItem("name","德玛")
//取值
var name = sessionStorage.getItem("name")
//删除
sessionStorage.removeItem("name");
//修改,key值相同即为修改
sessionStorage.setItem("name","小明")
//清空
sessionStorage.clear()

生命周期:

        cookie:时间到了或被用户删除

        localStorage:localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的

                             数据也不会消失。除非主动删除数据,否则数据永远不会消失

        sessionStorage:仅在当前浏览器窗口关闭之前有效。

存储大小:

        cookie:4kb

        localStorage与sessionStorage:5MB,甚至更大

存储位置:都保存在客户端

是否与服务器通讯:

        cookie:同源的http请求中携带

        localStorage,sessionStorage:不与服务器进行交互通信

使用:

        cookie:很少使用

        localStorage:适合长期存储在本地的数据,如判断用户是否已登录

        sessionStorage:sessionStorage存储的数据更偏向业务一些,如页面间数据传递等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最佳镜像搬运工 Skopeo 指南

最佳镜像搬运工 Skopeo 指南 文章目录最佳镜像搬运工 Skopeo 指南1. 概述2. Skopeo 是如何工作的&#xff1f;3. 为什么要用 Skopeo&#xff1f;3.1 灵活性3.2 安全性和可访问性3.3 功能多样性4. 安装4.1 Fedora4.2 RHEL / CentOS Stream ≥ 84.3 RHEL/CentOS ≤ 7.x4.4 Ubuntu…

GPU显存占满但利用率却很低

来帕多瓦联培已经一个多月了&#xff0c;最近调代码跑实验又发现了这个问题。这里提供另外一个解决思路。一个原因还是 cpu没跟上gpu节奏。 通常我们都会用尽可能大的 batch 来占满显存。但是如果cpu的读取和传输跟不上的话就会导致gpu利用率时上时下&#xff0c;而且训练时间…

2022.3IDEA配置grep console

首先安装Grep Console (这个大家都会吧) 安装之后 打开File 选项的Setting→Other Settings→Grep Console 3. 打开之后默认的样式是下图&#xff08;我做了一下标识&#xff09; whole line:是否一整行都是这个样式。用于区分一个关键字和一行字case insensitive: 不勾选就行…

spring cache (ehcache方式)

目录前置pom: jar配置文件:ehcache.xmlapplication.ymlMyEhCacheCacheConfiguration.java效果图禁用 MyEhCacheCacheConfiguration.java启用 MyEhCacheCacheConfiguration.java前置 会演示springcache的使用方式 项目地址: https://gitee.com/xmaxm/test-code/blob/master/cha…

第五章 神经网络(上)

5.1 神经元模型 神经网络目前使用的最广泛的定义为“神经网络是由具有适应性的简单单元组成的广泛并行互联的网络&#xff0c;它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。神经网络中最基本的成分是神经元模型&#xff0c;即上述定义的简单单元。 在生物神经…

离线安装Redis集群(redis-6.2.4)

记录&#xff1a;326 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用redis-6.2.4版本&#xff0c;在三台机器上&#xff0c;离线安装Redis集群。 版本&#xff1a; 操作系统&#xff1a;CentOS 7.9 Redis版本&#xff1a;redis-6.2.4 1.主机规划 目标&#xff…

物联网僵尸网络再次发起大规模攻击事件回顾

执行摘要 随着物联网的不断发展&#xff0c;物联网安全也被越来越多的人所关注。我们于 2016 年发布《物联网安全 白皮书》&#xff0c;进行物联网安全的科普介绍&#xff1b;于 2017 年发布《2017 物联网安全年报》&#xff0c;关注物联网资产 在互联网上的暴露情况、物联网设…

预训练模型相对位置编码和绝对位置编码的通俗理解

1 transformer最经典的理解&#xff1a; http://jalammar.github.io/illustrated-transformer/ 2 位置编码 相对位置编码(relative position representation)&#xff1a;https://zhuanlan.zhihu.com/p/397269153 Transformer中的相对位置编码(Relative Position Embedding)…

基于物联网的花卉养殖监控设计系统与研究

目 录 1、绪论 1 1.1课题背景 1 1.2 本课题研究意义 2 2、 系统总体方案设计 3 2.1、传感器部分 3 2.2、主控制部分 4 3、系统硬件设计 6 3.1 STC89C52RC单片机主控模块设计 6 3.2单片机最小系统 9 3.2.1时钟电路 9 3.2.2复位电路 10 3.2.3 STC89C52RC中断技术概述 10 3.3 温度…

基于最小误差阈值法的特定医学图像分割算法研究-含Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、阈值分割原理✳️ 三、最小误差阈值法✳️ 四、基于最小误差阈值法图像分割的实验分析✳️ 4.1 图像分割结果✳️ 4.2 边缘曲线提取结果✳️ 五、参考文献✳️ 六、Matlab代码获取✳️ 一、引言 图像是人们所熟悉的&#xff0c;但是图像…

服务器稳定性测试-LTP压力测试方法及工具下载

简介 LTP&#xff08;LinuxTest Project&#xff09;是SGI、IBM、OSDL和Bull合作的项目&#xff0c;目的是为开源社区提供一个测试套件&#xff0c;用来验证Linux系统可靠性、健壮性和稳定性。LTP测试套件是测试Linux内核和内核相关特性的工具的集合。 该工具的目的是通过把测…

【HMS Core】构建SplitBill应用集成多个HMS Core服务,助力您更好的了解华为生态组成

一、介绍 Duration: 3:00 总览 通过构建本次的SplitBill应用&#xff0c;您可以更好地了解华为生态的组成部分&#xff0c;包括认证服务、云存储和云数据库等Serverless服务。此外您还可以了解如何使用近距离数据通信服务的Nearby Connection功能分享文件。无需使用现金&…

重回synchronized(源码解读与实战解析篇)

读前必知 文中锁&#xff0c;也称为对象锁&#xff0c;而锁对象就是指的承载这个锁的对象&#xff0c;如下面&#xff0c;用法中所指的Object o&#xff0c;在print3中就是锁对象。 以下源码分析仅适用于jdk8&#xff0c;版本未知&#xff0c;因为源码提供者的源码版本访问地址…

金仓数据库KingbaseES GIN 索引

目录 一、索引的逻辑结构 二、索引的物理结构 三、GIN索引使用例子 1、前后模糊查询 2、全文检索 四、gin 索引可用于超长的字段 GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构&#xff0c;其中key是一个键值&#xff0c…

【uniapp】利用Vuex实现购物车功能

实战项目名称&#xff1a;实现购物车功能 文章目录一、实战步骤1. 先编辑store.js文件2. 定义方法和基本的结构3. 编写SETSHPPING二、在项目中调用1. 触发相应的mutations2. 利用computed计算数量和总价的方法提示&#xff1a;本实战内容大部分为具体实现的思路&#xff0c;界面…

C语言 2 —— 常量

常量是什么&#xff1f; 常量就是在程序运行过程中&#xff0c;值不会发生改变&#xff0c;而且一眼可以辨识出值的量。 如&#xff1a; 20&#xff0c;‘a’ , 3.1415926 , "helloworld" 常量的分类&#xff1a; 整形&#xff0c;浮点型&#xff0c;字符型&#…

成电860考研专业课考前划重点-学长课程音频转文字-用科大讯飞花钱买的-三万五千字

成电860考研专业课考前划重点-学长课程音频转文字。 这个是我2021年把视频的音频扒下来后用科大讯飞音频转文字网站上花了几十块钱买的。 说话人1 03:04 对有回放&#xff0c;我这边开回放了&#xff0c;大家可以让大家下载&#xff0c;然后我怕这边回放有问题&#xff0c;大家…

Airtest poco 入门小结

目录 一、poco介绍 1、poco能做什么 2、三种定位方式 1&#xff09;基本选择器 2&#xff09;相对选择器 3&#xff09;空间顺序选择器 4&#xff09;正则表达式方式 3、poco支持平台 二、Airtest介绍 1、Airtest能做什么 2、Airtest不能做什么 3、Airtest的图像识别…

发挥数字化平台优势,电子元器件采购商城系统助力企业改变固有低效流程

我国是全球最大的电子元器件生产国&#xff0c;电子元器件在国民经济发展中占据着重要地位。近年来&#xff0c;随着数字经济的快速发展&#xff0c;电子元器件的需求量也在不断升高&#xff0c;但疫情与国际环境对电子元器件产业要素流通仍然造成了一定困扰。在此背景下&#…

win10系统下使用onnxruntime部署yolov5模型

文章目录前言一、环境1、硬件2、软件二、YOLO模型三、新建Qt项目1、pro文件2、mainwindow.h3、mainwindow.cpp四、YOLO 类封装1、yolov5.h2、yolov5.cpp3、class.names五、效果前言 上一篇介绍过使用opencv-dnn模块实现模型推理部署&#xff0c;但视频效果较差&#xff0c;本篇…