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技术很烂的五个原因
Apr 26 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
Feb 17 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
jQuery中的read和JavaScript中的onload函数的区别
Aug 27 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
Nov 13 Javascript
jQuery验证插件validate使用详解
May 11 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
Mar 02 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
Jul 05 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
Feb 16 Javascript
js事件on动态绑定数据,绑定多个事件的方法
Sep 15 Javascript
微信小程序自定义导航教程(兼容各种手机)
Dec 12 Javascript
浅谈Vue中render中的h箭头函数
Nov 07 Javascript
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
3种平台下安装php4经验点滴
2006/10/09 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php多进程应用场景实例详解
2019/07/22 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
javascript实现前端分页效果
2020/06/24 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Python学习笔记_数据排序方法
2014/05/22 Python
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
Django开发的简易留言板案例详解
2018/12/04 Python
Django URL参数Template反向解析
2020/11/24 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
家居饰品店创业计划书
2014/01/31 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
个人廉政承诺书
2015/04/28 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
社会实践单位意见
2015/06/05 职场文书
埃及王子观后感
2015/06/16 职场文书
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏