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 相关文章推荐
use jscript List Installed Software
Jun 11 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
Mar 08 Javascript
js 触发select onchange事件代码
Mar 20 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
Jun 30 Javascript
JavaScript实现的in_array函数
Aug 27 Javascript
使用javascript实现雪花飘落的效果
Jan 13 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
Jun 13 Javascript
总结Node.js中的一些错误类型
Aug 15 Javascript
vue+node+webpack环境搭建教程
Nov 05 Javascript
Vue实现简易翻页效果源码分享
Nov 08 Javascript
微信小程序wx.request的简单封装
Nov 13 Javascript
jQuery实现获取多选框的值示例
Feb 07 jQuery
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
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
PHP中Array相关函数简介
2016/07/03 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python 布尔操作实现代码
2013/03/23 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python常用特殊方法实例总结
2019/03/22 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
放飞中国梦演讲稿
2014/04/23 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
领导班子整改方案
2014/10/25 职场文书
Python机器学习应用之基于线性判别模型的分类篇详解
2022/01/18 Python