AJAX学习笔记

Ajax是 Asynchronous JavaScript And XML    异步的JavaScript 和 XML。

Posted in Javascript onMay 18, 2021

概念

AJAX学习笔记

异步和同步:客户端和服务器端相互通信的基础上。

  • 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。
  • 客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。

Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。提升用户的体验。

原生Ajax

//1.创建核心对象
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
} else {// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

//2. 建立连接
/*
    参数:
        1. 请求方式:GET、POST
            * get方式,请求参数在URL后边拼接。send方法为空参
            * post方式,请求参数在send方法中定义
        2. 请求的URL:
        3. 同步或异步请求:true(异步)或 false(同步)

 */
xmlhttp.open("GET", "ajaxServlet?username=tom", true);

//3.发送请求
xmlhttp.send();

//4.接受并处理来自服务器的响应结果
//获取方式 :xmlhttp.responseText
//什么时候获取?当服务器响应成功后再获取

//当xmlhttp对象的就绪状态改变时,触发事件onreadystatechange。
xmlhttp.onreadystatechange = function () {
    //判断readyState就绪状态是否为4,判断status响应状态码是否为200
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        //获取服务器的响应结果
        var responseText = xmlhttp.responseText;
        alert(responseText);
    }
}

jQuery实现

基本语法如下,有三种方式:

  • $.ajax({键值对})
  • $.get()
  • $.post()

$.ajax()

语法格式如下:

$.ajax({
    url: "请求路径",
    type: "请求方式GET或POST",
    data: "GET请求参数或POST请求参数",
    dataType: "响应数据的格式"
    success: function (data) {
    	// 响应成功后的回调函数,data是响应回来的数据
    },
    error: function () {
        // 响应出现错误时会执行的回调函数
    }
});

示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <input type="button" value="使用get发送异步请求" onclick="sendAjaxByGet()">
    <input type="button" value="使用post发送异步请求" onclick="sendAjaxByPost()">
</div>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
    function sendAjaxByGet() {
        $.ajax({
            url:"ajaxServlet1", // 请求路径
            type:"GET", // 请求方式
            data:"username=zhangsan", // 请求参数
            dataType:"json", // 设置接受到的响应数据的格式,如果是json格式则设置为json
            success:function (data) { // 响应成功后的回调函数
                alert(data.msg);
            },
            error:function () { // 响应出现错误时会执行的回调参数
                alert("出错了...");
            }
        })
    }

    function sendAjaxByPost() {
        $.ajax({
            url:"ajaxServlet1", // 请求路径
            type:"POST", // 请求方式
            data:{"username":"zhangsan"}, // 请求参数
            dataType:"json", // 设置接受到的响应数据的格式,如果是json格式则设置为json
            success:function (data) { // 响应成功后的回调函数
                alert(data.msg);
            },
            error:function () { // 响应出现错误时会执行的回调参数
                alert("出错了...");
            }
        })
    }
</script>
</body>
</html>

 

$.get()

基本语法如下:

$.get(url, [data], [callback], [type])
// 参数说明
//  url:指的是请求路径
//  data:请求参数
//  callback:回调函数
//  type:响应数据的类型,如json

示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <input type="button" value="使用get发送异步请求" onclick="sendAjaxByGet()">
</div>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
    function sendAjaxByGet() {
        /*
            * 语法:$.get(url, [data], [callback], [type])
				* 参数:
					* url:请求路径
					* data:请求参数
					* callback:回调函数
					* type:响应结果的类型
         */
        $.get("ajaxServlet1", {username: "zhangsan"}, function (data) {
            alert(data.msg);
        }, "json")
    }
</script>
</body>
</html>

$.post()

基本语法如下:

$.post(url, [data], [callback], [type])
// 参数说明
//  url:指的是请求路径
//  data:指的是请求参数
//  callback:指的是响应成功后的回调函数
//  type:指的是响应数据的格式类型

示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <input type="button" value="使用post发送异步请求" onclick="sendAjaxByPost()">
</div>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
    function sendAjaxByPost() {
        /*
            * 语法:$.post(url, [data], [callback], [type])
				* 参数:
					* url:请求路径
					* data:请求参数
					* callback:回调函数
					* type:响应结果的类型
         */
        $.post("ajaxServlet1", {username: "zhangsan"}, function (data) {
            alert(data.msg);
        }, "json")
    }
</script>
</body>
</html>

注意,本例用到的后端代码是Java的Servlet,其中AjaxServlet1.java如下:

@WebServlet("/ajaxServlet1")
public class AjaxServlet1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        System.out.println(username);
        String json_str = "{\"msg\":\"ajax response success!\"}";
        response.getWriter().print(json_str);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

本节源代码地址:GitHub的Demo

Javascript 相关文章推荐
JS生成不重复随机数组的函数代码
Jun 10 Javascript
JavaScript匿名函数与委托使用示例
Jul 22 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
Mar 04 Javascript
简述JavaScript对传统文档对象模型的支持
Jun 16 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
Oct 09 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 Javascript
vue的Virtual Dom实现snabbdom解密
May 03 Javascript
浅谈原型对象的常用开发模式
Jul 22 Javascript
vue子路由跳转实现tab选项卡
Jul 24 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
Sep 21 Javascript
vue中实现弹出层动画效果的示例代码
Sep 25 Javascript
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
JS如何使用剪贴板操作Clipboard API
详解Node.js如何处理ES6模块
May 15 #Javascript
详解vue中v-for的key唯一性
解读Vue组件注册方式
May 15 #Vue.js
如何理解Vue简单状态管理之store模式
May 15 #Vue.js
Vue如何实现组件间通信
May 15 #Vue.js
详解Vue的sync修饰符
May 15 #Vue.js
You might like
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
js实现小星星游戏
2020/03/23 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
python面向对象法实现图书管理系统
2019/04/19 Python
python适合人工智能的理由和优势
2019/06/28 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
养殖行业的创业计划书
2014/01/05 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
学校教学工作总结2015
2015/05/19 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android
Python制作表白爱心合集
2022/01/22 Python