AJAX和JSON学习笔记

1.关系映射 - 多对多
对象名 = db.Table(
'关联表名',
db.Column('id',db.Integer,primary_key=True),
db.Column('外键列名',db.TYPE,db.ForeignKey('主表.主键')),
db.Column('外键列名',db.TYPE,db.ForeignKey('主表.主键'))
)

关联属性以及反向引用关系:
    在任意一个实体中:
        关联属性名=db.relationship(
            '关联的实体类',
            secondary='关联的第三张表名',
            lazy='dynamic',
            backref=db.backref(
                '反向引用属性名',
                lazy='dynamic'
            )
        )

2.cookies
1.保存cookie到客户端
响应对象.set_cookie(key,value,max_age)
2.获取cookie的值
request.cookies
包含了当前站点对应的所有的cookies的值

    request.cookies['key']
    request.cookies.get('key')

    判断数据是否在cookies中:
    if key in request.cookies:
        数据在cookies中
    else:
        数据不在cookies中
3.删除cookie的值
    响应对象.delete_cookie()

3.session
1.session在Flask中的实现
1.配置 SECRET_KEY
app.config['SECRET_KEY'] = 'xieshadouxing'
2.使用session
from flask import session

        1.向session中保存数据
            session['key'] = value;
        2.从session中获取数据
            value = session['key']
        3.从session中删除数据
            del session['key']

=======================================================
AJAX - 阿贾克斯
1.什么是AJAX
Asynchronous Javascript And Xml

Asynchronous : 异步的

    同步访问:
        当客户端向服务器发送请求时,服务器在处理过程中,浏览器只能等待,效率偏低
    异步访问:
        当客户端向服务器发送请求时,服务器在处理过程中,客户端可以做其他的操作,不需要一直等待,效率偏高

Xml:eXtensible Markup Language
         可扩展的   标签   语言


AJAX优点:
    1.异步 访问
    2.局部 刷新

AJAX的使用场合:
    1.搜索建议
    2.表单验证
    3.前后端完全分离

2.AJAX的核心对象-异步对象(XMLHttpRequest)
1.什么是XMLHttpRequest
简称为"xhr"
称为"异步对象",代替浏览器向服务器发送请求并接收响应
xhr 是由JS来提供
2.创建异步对象(xhr)
主流的异步对象是 XMLHttpRequest 类型的,并且主流浏览器都支持(IE7+,Chrome,Firefox,Safari,Opera)全部支持。但在IE低版本浏览器中(IE6以及以下),就不支持XMLHttpRequest,需要使用 ActiveXObject() 来创建异步对象

    支持 XMLHttpRequest :
        new XMLHttpRequest()
    不支持 XMLHttpRequest :
        new ActiveXObject("Microsoft.XMLHTTP")

    练习:
        1.创建Flask项目 - Ajax01
        2.创建访问路径 /01-xhr,并去往 01-xhr.html 模板
        3.在模板中
            创建一个按钮,单击时,通过一个 js方法,根据浏览器创建 xhr 对象并返回
3.xhr的成员
    1.方法 - open()
        作用:创建请求
        语法:open(method,url,async)
            method : 请求方法,取值为'get'或'post'
            url : 请求地址,字符串
            async : 是否采用异步的方式发送请求
                true : 使用异步方式发送请求
                false : 使用同步方式发送请求
        ex:
            xhr.open('get','/server',true)

    2.属性 - readyState
        作用:请求状态,通过不同的请求状态值来表示xhr与服务器的交互情况
        由0-4共5个值来表示5个不同的状态
        0 : 请求尚未初始化
        1 : xhr已经与服务器建立连接
        2 : 服务器端已经开始接收请求
        3 : 请求正在处理中
        4 : 响应已完成
    3.属性 - status
        作用:表示服务器端的响应状态码
            200:表示服务器正确处理所有的请求以及给出响应
            404:请求资源不存在
            500:服务器内部错误
    4.属性 - responseText
        作用:服务器端的响应数据
    5.事件 - onreadystatechange
        作用:每当xhr的readyState属性值发生改变的时候要触发的操作 - 回调函数
            在该函数中,只有当readyState的值为4并且status的值为200的时候,就可以正常的接收 responseText 了
    6.方法 - send()
        作用:通知xhr向服务器端发送请求
        语法:send(body)
            body : 表示请求的主体
                get请求:是没有请求主体的,所以body的值为null    
                    xhr.send(null)
                post请求:是有请求主体的,所以body的位置处要表示请求数据
                    xhr.send("请求数据")
                    xhr.send("参数=值&参数=值")
4.AJAX的操作步骤
    1.GET请求
        1.创建 xhr 对象
        2.创建请求 - open()
        3.设置回调函数 - onreadystatechange
            判断状态并且接收数据
        4.发送请求 - send()


    2.GET 请求传递参数
        //1.获取 xhr
        //2.创建请求
            xhr.open('get','/02-server?name=value&name=value',true)
        //3.设置回调函数
        //4.发送请求

        服务器端:
            使用 request.args.get('name')接收请求参数 

    3.POST请求
        1.请求提交的数据要作为 send() 的参数进行提交
            xhr.send("参数=值&参数=值");
        2. 修改请求消息头
            在AJAX中,提交POST请求时,AJAX默认将Content-Type请求消息头的值修改为 "text/plain" 了,所以导致数据无法正常提交

            解决方案:将Content-Type的请求消息头再修改回"application/x-www-form-urlencoded"即可

            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")




    练习:
        1.创建数据库 - ajax
        2.创建实体类 - Users ,映射成表
            id - 主键,自增
            loginname - 登录名称
            loginpwd - 登录密码
            uname - 用户名称
        3.使用ajax验证登录名称是否存在

xxx
request.args.get()
AJAX:
1.AJAX核心对象 - XMLHttpRequest
function getXhr(){
if(window.XMLHttpRequest)
return new XMLHttpRequest();
else
return new ActiveXObject("Microsoft.XMLHTTP");
}
2.xhr的成员
1.方法 - open()
目的:创建请求
语法:open(method,url,async)
2.属性 - readyState
目的:表示xhr与服务器之间的交互状态
取值:0-4
4:响应完成
3.属性 - status
目的:表示服务器自身的响应状态码
取值:标准的HTTP响应码
200:服务器正常响应所有内容
4.属性 - responseText
目的:响应内容
5.事件 - onreadystatechange
目的:监控xhr的请求状态
取值:函数
只有当readyState的值为4并且status的值为200的时候才正常的接收数据
6.方法 - send()
目的:发送请求
语法:send(body)
get : send(null)
post : send("name=value&name=value")
7.方法 - setRequestHeader()
目的:设置请求消息头
语法:setRequestHeader(name,value)
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

3.AJAX操作步骤
    1.GET请求
        1.创建/获取 xhr
        2.创建请求
        3.设置回调函数
        4.发送请求

        注意:如果有请求提交数据的话需要在 url 的后面拼查询字符串
    2.POST请求
        1.创建/获取 xhr
        2.创建请求
        3.设置回调函数
        4.设置 Content-Type 的请求消息头
        5.发送请求

        注意:如果有请求提交数据的话需要在 send() 中传递数据

1.JSON
1.JS 对象
语法:
1.通过一对 {} 表示一个对象
2.在 {} 中允许通过 key:value 的形式来表示属性
3.多对的属性和值之间使用 , 隔开
var obj = {
name:'MrWang',
age:37,
gender:'Unknown'
}
2.什么是JSON
JavaScript Object Notation
表现形式
按照JS对象的格式所构建出来的字符串就是JSON串

    在ajax中,允许将复杂格式的响应数据(如列表等)构建成JSON格式的字符串再进行响应输出
3.JSON的表现
    1.JSON表示单个对象
        1.使用 {} 表示单个对象
        2.在{}中使用key:value的格式表示数据
        3.多对属性和值之间使用 , 隔开
        4.key必须使用""引起来
        5.value如果是字符串的话,也需要用""引起来

        ex:
            var obj = {
                "name":"MrWang",
                "age":37,
                "gender":"Unknown"
            }

            var str = '{"name":"MrWang","age":37,"gender":"Unknown"}';
    2.JSON表示多个对象
        1.使用[](数组)来表示多个对象
        2.数组中允许包含多个JSON对象 或 字符串
            1.使用JSON数组来表示若干字符串
                var arr = ["王老师","王夫人","王小超"];
                var str = '["王老师","王夫人","王小超"]';
            2.使用JSON数组来表示若干对象
                var arr = [
                    {
                        "name":"王老师",
                        "age":37,
                        "gender":"男"
                    },
                    {
                        "name":"王夫人",
                        "age":15,
                        "gender":"男"
                    }
                ];

                var str = '[
                    {
                        "name":"王老师",
                        "age":37,
                        "gender":"男"
                    },
                    {
                        "name":"王夫人",
                        "age":15,
                        "gender":"男"
                    }
                ]';
4.使用jq的each()迭代数组
    1. $.each();
        语法:
            $.each(arr,function(index,obj){
                //index : 遍历出来的元素的下标
                //obj : 表示遍历出来的元素
            });
    2. $obj.each();
        语法:
            $obj.each(function(index,obj){
                //index : 遍历出来的元素的下标
                //obj : 表示遍历出来的元素
            });

            该函数用于循环遍历 $obj 元素

2.后台处理JSON
在后台查询数据时,需要先将数据转换为JSON格式的字符串,再响应给客户端。到了前端后再将字符串转换为JS对象再进行解析。

1.步骤
    1.后台先获取数据
        数据类型为:
            1.元组
            2.列表
            3.字典
    2.在后台将数据转换为符合JSON格式的字符串
    3.在后台将JSON格式字符串进行响应
    4.在前端将JSON格式的字符串解析成JS对象

2.Python中的JSON处理
    使用 Python 中的 json 类可以完成转换
    import json
    jsonStr = json.dumps(元组|列表|字典)
    return jsonStr
3.前端中的JSON处理
    通过以下方式,将JSON的串转换为JS对象或数组
    在JS中:js对象/数组 = JSON.parse(JSON串)

JSON:JavaScript Object Notation
1.语法
1.使用{}括起来
2.使用key:value来描述属性(数据)
3.key必须使用""引起来
4.value如果是字符串的话也必须使用""引起来
5.多个key:value之间使用 , 隔开
2.后端处理
1.允许转换成JSON的类型
1.字典
2.列表
3.元组

    在实体类中,编写一个方法将实体对象转换成字典,以便于方便的转换成JSON

    class Users(db.Model):
        ... ...
        def to_dict(self):
            dic = {
                loginname:self.loginname
            }
            return dic
2.将元素装换为JSON字符串
    import json
    jsonStr=json.dumps(dic/tup/list)

3.前端处理
将后端得到的JSON字符串转换成JS对象,再解析
JSON.parse(str)
4.使用JQ的each函数进行数组的迭代
1.$.each(arr,function(i,obj){})
2.$arr.each(function(i,obj){});
=======================================================
1.JQUERY AJAX
1.$obj.load(url,data,callback);
作用:异步加载数据到$obj元素中
参数:
1.url:异步请求的地址
2.data:传递给服务器端的参数(可选),该数据将决定请求方法是什么。
1.可以传递普通的字符串
"name=MrWang&age=30"
2.可以是JSON对象
{
"name":"MrWang",
"age":30
}
3.callback:异步请求成功后的回调函数(可选)
取值为 匿名函数
function(resText,statusText){
resText : 响应数据
statusText : 响应的状态文本
}

JSON:JavaScript Object Notation
1.语法
1.使用{}括起来
2.使用key:value来描述属性(数据)
3.key必须使用""引起来
4.value如果是字符串的话也必须使用""引起来
5.多个key:value之间使用 , 隔开
2.后端处理
1.允许转换成JSON的类型
1.字典
2.列表
3.元组

    在实体类中,编写一个方法将实体对象转换成字典,以便于方便的转换成JSON

    class Users(db.Model):
        ... ...
        def to_dict(self):
            dic = {
                loginname:self.loginname
            }
            return dic
2.将元素装换为JSON字符串
    import json
    jsonStr=json.dumps(dic/tup/list)

3.前端处理
将后端得到的JSON字符串转换成JS对象,再解析
JSON.parse(str)
4.使用JQ的each函数进行数组的迭代
1.$.each(arr,function(i,obj){})
2.$arr.each(function(i,obj){});
=======================================================
1.JQUERY AJAX
1.$obj.load(url,data,callback);
作用:异步加载数据到$obj元素中
参数:
1.url:异步请求的地址
2.data:传递给服务器端的参数(可选),该数据将决定请求方法是什么。
1.可以传递普通的字符串
"name=MrWang&age=30"
2.可以是JSON对象
{
"name":"MrWang",
"age":30
}
3.callback:异步请求成功后的回调函数(可选)
取值为 匿名函数
function(resText,statusText){
resText : 响应数据
statusText : 响应的状态文本
}
2.$.get()
1.语法:
$.get(url,data,callback,type)
2.参数详解
1.url:异步请求地址
2.data:异步请求的参数
1.字符串 :name=value&name=value
2.JSON :{"name":"value","name":"value"}
3.callback:请求成功时的回调函数
function(resText){
resText:表示就是响应成功后的响应数据
}
4.type:响应回来的数据的类型
1.html :响应回来的数据是html文本
2.text :响应回来的数据是text文本
3.json :响应回来的数据是JSON对象
4.script :响应回来的数据是js脚本代码
注意:如果此处指定了类型的话,那么在callback中,就无需再做类型的转换
3.$.post()
4.$.ajax()
作用:自定所有的ajax行为
语法:$.ajax({ajax设置的参数数据对象});
参数们:
1.url : 字符串,表示异步请求的地址
2.type : 字符串,请求方式 (get,post)
3.data : 传递到服务器端的参数
1.字符串 :"name=value&name=value"
2.JSON对象 :{"name":"value"}
4.dataType :字符串,响应回来的数据的格式
1.html
2.xml
3.text
4.script
5.json
6.jsonp :有关跨域的响应格式
5.success : 回调函数,请求和响应成功时的回调函数
function(data){
data : 表示服务器端响应回来的数据
}
============================================
6.error : 回调函数,请求或响应失败时的回调函数
7.beforeSend : 回调函数,在发送ajax请求之前的回调函数,如果return false的话则表示终止本次请求
2.跨域 - Cross Domain
1.什么是跨域
HTTP协议中 - 同源策略
同源:多个地址中,相同协议,相同域名,相同端口被视为“同源”
在HTTP中,必须是同源地址才能相互发送请求,非同源地址被拒绝的( 和 )

    http://www.tedu.cn/a.html
    http://www.tedu.cn/b.html
    以上地址是 "同源"

    http://www.tedu.cn/a.html
    https://www.tedu.cn/b
    由于协议不同,以上两个地址"非同源"

    http://localhost:5000/a.html
    http://127.0.0.1:5000/b
    http://192.168.121.35/c
    由于域名不同,以上三个地址"非同源"

    跨域:非同源的网页,在相互发送请求时需要跨域
2.解决方案
    通过 <script> 向服务器发送请求

猜你喜欢

转载自www.cnblogs.com/-hjj/p/10040635.html