博客
关于我
WEB--Ajax基础
阅读量:588 次
发布时间:2019-03-11

本文共 5446 字,大约阅读时间需要 18 分钟。

文章目录

Ajax简介

  • Ajax定义:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术
  • Ajax作用:要让用户留在当前页面中,同时发出新的HTTP请求,就必须用JavaScript发送这个新请求,接收到数据后,再用JavaScript更新页面,这样一来用户就感觉自己仍然停留在当前页面,但是数据却可以不断地更新
  • Ajax原理:浏览器先发生某个事件,比如说点击,此时js创建XMLHttpRequest对象并发送请求,服务器处理请求并返回数据,此时js处理返回并更新页面
  • 参考文档:https://www.cnblogs.com/nuannuan7362/p/6441192.html?utm_source=itdadao&utm_medium=referral

Ajax请求步骤

  1. 初始化/创建一个XMLHttpRequest异步对象
var xmlhttp;xmlhttp =new XMLHttpRequest();     //初始化,创建对象
  1. 设置回调函数
xmlhttp.onreadystatechange=callback; //响应回掉/监听
  1. 使用open()方法与服务器建立连接
// getxmlhttp.open("GET",url,true);   // postxmlhttp.open("POST",url,true);   xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")   // 设置请求头
  1. 使用send()方法发送请求
xmlhttp.send('null');  // get请求发送xmlhttp.send({   'user': user, 'pwd': pwd});  //post请求发送
  1. 接收返回的数据
function callback() {     // 判断异步对象的状态  if(xmlhttp.readyState == 4) {       // 判断交互是否成功    if(xmlhttp.status == 200) {         // 获取服务器响应的数据      var res = xmlhttp.responseText      // 解析数据      res = JSON.parse(res)    }  }}

XMLHttpRequest

  • xmlhttp.readyState有五种可能的值:
  • 0 (未初始化): (XMLHttpRequest)对象已经创建,但还没有调用open()方法。
  • 1 (载入):已经调用open() 方法,但尚未发送请求。
  • 2 (载入完成): 请求已经发送完成。
  • 3 (交互):可以接收到部分响应数据。
  • 4 (完成):已经接收到了全部数据,并且连接已经关闭。
  • xmlhttp.status: 同http/https请求返回状态
  • 200: 响应成功

登陆案例(xhr)

  • 说明:一个带有用户名、密码和登陆按钮的页面,通过ajax实现点击登陆按钮后判断是否登陆成功,且页面不刷新

一、表单发送ajax请求登录

// main.js$(document).ready(function(){       var xmlhttp;    $('#login').click(function(){           var user = document.getElementById("username").value;        var pwd = document.getElementById("password").value;        var url = "http://127.0.0.1:8000/login"        xmlhttp =new XMLHttpRequest();     //初始化,创建对象        xmlhttp.onreadystatechange=callback; //响应回掉/监听        xmlhttp.open("POST",url,true);   //设置访问的页面                // 组装post数据并发送请求        var formData = new FormData();        formData.append('user', user);        formData.append('pwd', pwd);        xmlhttp.send(formData);    });    // 监听函数    function callback() {           // 判断异步对象的状态        if(xmlhttp.readyState == 4) {             // 判断交互是否成功          if(xmlhttp.status == 200) {               // 获取服务器响应的数据            var res = xmlhttp.responseText            // 解析数据            res = JSON.parse(res)            if (res.code ===1) {                 alert('成功')            }else{                 alert('失败')          }          }        }      }  });
# server.pyfrom flask import Flask, render_template, request, jsonifyapp =  Flask(__name__)user_info = {   'user': 'zhangsan', 'pwd': '123456'}@app.route('/', methods=['get'])def index():        return render_template('ajax.html')@app.route('/login', methods=['post'])def login():    data = request.form    if user_info.get('user') == data.get('user') and user_info.get('pwd') == data.get('pwd'):        return jsonify({   'code': 1, 'data':None, 'msg': '成功'})    else:        return jsonify({   'code': 0, 'data':None, 'msg': '密码有误'})if __name__ == "__main__":    app.run(debug=True, host='0.0.0.0',port=8000)

jquery ajax

$.ajax常见参数

  • url: 发送请求的 URL
  • type:请求类型
  • data:发送到服务器的数据
  • dataType: 响应数据类型
  • success: 请求成功时运行的函数
  • error:如果请求失败要运行的函数
  • async: 布尔值,表示请求是否异步处理。默认是 true
  • 方式一: success
//  main.js$(function(){       $('#login').click(function(){           // 获取账号密码        var user = $('#username').val();        var pwd = $('#password').val();        // 方式一         $.ajax({               url: '/login',    // url=  host + api            type: 'post',            data: {   'user': user, 'pwd': pwd},            dataType: 'json',            success: function(data){                   if (data.code === 1){                       alert(data.msg);                }else{                       alert(data.msg);                }              },        })    });});
  • 方式二: done & fail
//  main.js$(function(){       $('#login').click(function(){           // 获取账号密码        var user = $('#username').val();        var pwd = $('#password').val();        // 方式二        $.ajax({               url: '/login',            type: 'post',            data: {   'user': user, 'pwd': pwd},            dataType: 'json'        }).done(function(data){               if (data.code === 1){                   alert(data.msg);            }else{                   alert(data.msg);            }        }).fail(function(){               alert('请求失败')        })    });});

级联下拉框(jQuery+Ajax)

  • 说明: 实现二级下拉框随一级下拉框联动展示
Ajax
// main.js$(function(){     var pro = $('#pro')  $.ajax({       url: '/pro_list',        type: 'get',    data: '',    dataType: 'json',  }).done(function(data){       if (data.code === 1){         var res = data.data      for (item in res){           var option = ''        pro.append(option);      }    }else{         alert('请求失败')    };  });  // 二级下拉框  pro.change(function(){       var pro_id = pro.val();    $.ajax({         url: '/interface',          type: 'post',      data: {   'pro_id': pro_id},      dataType: 'json',    }).done(function(data){         var inter = $('#interface');      if (data.code === 1){           inter.empty();  // 清空二级下拉框上一次选择内容        var res = data.data        for (item in res){             var option = ''          inter.append(option);        }      }else{           alert('请求失败')      };    });  })});
你可能感兴趣的文章
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>