天天看点

Python全栈 Web(Ajax 概述 创建)

什么是AJAX

Asynchronous JavaScript And Xml

异步的  JS  和 Xml

通过js异步的向服务器发送请求并接受响应数据

同步访问:

当客户端向服务器发送请求时 服务器在处理的过程中浏览器只能等待

异步访问:

当客户端向服务器发送请求时 服务器在处理的过程中 客户端可以做其他操作

不需要一直等待

AJAX优点:

异步访问

局部刷新

使用场合:

搜索建议

表单验证

前后端完全分离

AJAX核心对象  异步核心对象(XMLHttprequest):

什么是XMLHTTPRequest

代替浏览器向服务器发送异步请求并接受响应的 “异步对象”

是由js来提供的

创建异步对象

主流的异步对象是XMLHTTPRequest类型的 

并且主流浏览器(IE+ Chrome  Firefox Safari Opera)都支持

低版本浏览器中(IE6以下)就不支持XMLHTTPRequest  

需要使用ActiveXObject() 来创建异步对象

1.AJAX

1.创建 xhr

/**
 * common.js
 */
function createXhr(){
    if(window.XMLHttpRequest)
        return new XMLHttpRequest();
    else
        return new ActiveXObject('Microsoft.XMLHTTP');
}           
@app.route('/02-get')
def get_views():
    return render_template('02-get.html')           

2.xhr 的成员

1.方法 - open()

作用:创建请求

语法:open(method,url,asyn)

method:请求方式,取值'get' 或 'post'

url:请求地址,字符串

asyn:是否采用异步的方式

true:异步

false:同步

ex:

xhr.open('get','/server',true);

2.属性 - readyState

作用:请求状态,通过不同的请求状态来表示xhr与服务器的交互情况

由0-4共5个值来表示5个不同的状态

0 :请求尚未初始化

1 :已经与服务器建立连接

2 :服务器端已接收请求

3 :请求正在处理中

4 :响应已经完成

3.属性 - status

作用:服务器端的响应状态码

200 :表示服务器正确处理所有的请求以及给出响应

404 :请求资源不存在

500 :服务器内部错误

... ...

4.事件 - onreadystatechange

作用:每当xhr的readyState发生改变的时候都要触发的操作 - 回调函数

只有当readyState的值为4并且status的值为200的时候,才可以正常的去接收响应数据

5.属性 - responseText

作用:响应数据

6.方法 - send()

作用:通知xhr向服务器端发送请求

语法:send(body)

get请求:body的值为null

send(null)

post请求:此处为要提交的数据

send("请求数据")

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <button onclick="send_ajax()">发送AJAX请求</button>
    <p id="show"></p>
    <script src="/static/js/common.js"></script>
    <script>
        function send_ajax(){
            //1.创建xhr
            var xhr = createXhr();
            //2.创建请求
            // xhr.open(method,url,asyn)
            xhr.open('get','/02-server',true);
            //3.设置回调函数(判断状态接收响应数据)
            //xhr.onreadystatechange = function(){}
            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4 && xhr.status == 200){
                    //xhr的自身状态是4并且服务器的状态是200就可以接收响应数据
                    document.getElementById('show').innerHTML = xhr.responseText;
                }
            }
            //4.发送请求
            xhr.send(null);
        }
    </script>
</body>
</html>           

3.AJAX的操作步骤

1.GET请求

1.创建 xhr 对象

2.创建请求 - open()

3.设置回调函数 - onreadystatechange    判断状态并接收响应数据

4.发送请求 - send()

请求参数:

推荐:请求地址后拼QueryString

xhr.open('get','/02-server?key=value&key=value',true)

               2.POST请求

4.设置请求消息头  - Content-Type

5.发送请求 - send()

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="/static/js/common.js"></script>
  <script src="/static/js/jquery-1.11.3.js"></script>
</head>
<body>
  姓名:<input type="text" id="uname">
  <button id="btnSend">发送AJAX请求</button>
  <p id="show"></p>
  <script>
    $(function(){
      $("#btnSend").click(function(){
        //1.创建xhr
        var xhr = createXhr();
        //2.创建请求
        var url = "/03-server?uname="+$("#uname").val();
        xhr.open('get',url,true);
        //3.设置回调函数
        xhr.onreadystatechange = function(){
          if(xhr.readyState==4&&xhr.status==200){
            $("#show").html(xhr.responseText);
          }
        }
        //4.发送请求
        xhr.send(null);
      });
    });
  </script>
</body>
</html>