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 相关文章推荐
javascript读取RSS数据
Jan 20 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
javascript实现无限级select联动菜单
Jan 02 Javascript
详谈javascript中DOM的基本属性
Feb 26 Javascript
JavaScript检测鼠标移动方向的方法
May 22 Javascript
JavaScript类型系统之Object详解
Jan 07 Javascript
学习Javascript面向对象编程之封装
Feb 23 Javascript
Vue中定义全局变量与常量的各种方式详解
Aug 23 Javascript
详解Vue中组件的缓存
Apr 20 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
Apr 30 Javascript
Javascript节流函数throttle和防抖函数debounce
Dec 03 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 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
Views rows style模板重写代码
2011/05/16 PHP
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
PHP7新功能总结
2019/04/14 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
javascript中expression的用法整理
2014/05/13 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
Python smtplib实现发送邮件功能
2018/05/22 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
什么是岗位职责
2013/11/12 职场文书
大学生自荐信
2013/12/11 职场文书
愚人节活动策划方案
2014/03/11 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
表彰大会新闻稿
2015/07/17 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python