python开发之【Ajax】

一、概述

  对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上。

  AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案。

  • 异步的JavaScript: 使用 【JavaScript语言】 以及 相关【浏览器提供类库】 的功能向服务端发送请求,当服务端处理完请求之后,【自动执行某个JavaScript的回调函数】。

     PS:以上请求和响应的整个过程是【偷偷】进行的,页面上无任何感知。

  • XML XML是一种标记语言,是Ajax在和后台交互时传输数据的格式之一

  原生Ajax和jQuery Ajax本质就是一个XMLHttpRequest对象

  利用AJAX可以做:

    1、注册时,输入用户名自动检测用户是否已经存在。

    2、登陆时,提示用户名密码错误

    3、删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。

二、jQuery Ajax

  jQuery其实就是一个JavaScript的类库,其将复杂的功能做了上层封装,使得开发者可以在其基础上写更少的代码实现更多的功能。

  • jQuery 不是生产者,而是大自然搬运工。
  • jQuery Ajax本质 XMLHttpRequest 或 ActiveXObject

  

三、原生Ajax

  Ajax主要就是使用 【XmlHttpRequest】对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件)。

  XmlHttpRequest对象的主要方法:

a. void open(String method,String url,Boolen async)

   用于创建请求

   参数:

       method: 请求方式(字符串类型),如:POST、GET、DELETE...

       url:    要请求的地址(字符串类型)

       async:  是否异步(布尔类型)

b. void send(String body)

    用于发送请求

    参数:

        body: 要发送的数据(字符串类型)

c. void setRequestHeader(String header,String value)

    用于设置请求头

    参数:

        header: 请求头的key(字符串类型)

        vlaue:  请求头的value(字符串类型)

d. String getAllResponseHeaders()

    获取所有响应头

    返回值:

        响应头数据(字符串类型)

e. String getResponseHeader(String header)

    获取响应头中指定header的值

    参数:

        header: 响应头的key(字符串类型)

    返回值:

        响应头中指定的header对应的值

f. void abort()

    终止请求

  XmlHttpRequest对象的主要属性:

  

a. Number readyState

   状态值(整数)

   详细:

      0-未初始化,尚未调用open()方法;

      1-启动,调用了open()方法,未调用send()方法;

      2-发送,已经调用了send()方法,未接收到响应;

      3-接收,已经接收到部分响应数据;

      4-完成,已经接收到全部响应数据;

b. Function onreadystatechange

   当readyState的值改变时自动触发执行其对应的函数(回调函数)

c. String responseText

   服务器返回的数据(字符串类型)

d. XmlDocument responseXML

   服务器返回的数据(Xml对象)

e. Number states

   状态码(整数),如:200、404...

f. String statesText

   状态文本(字符串),如:OK、NotFound...

四、伪“Ajax”

  由于HTML标签的iframe标签具有局部加载内容的特性,所以可以使用其来伪造Ajax请求

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Title</title>
  6     {% load staticfiles %}
  7
  8     <style>
  9         .ajaxsubmit1, .ajaxsubmit2, .ajaxsubmit3, .ajaxsubmit4, .ajaxsubmit5,.ajaxsubmit6 {
 10             display: inline-block;
 11             background-color: blue;
 12             color: white;
 13             margin: 5px 5px;
 14         }
 15     </style>
 16
 17 </head>
 18 <body>
 19 <h1>index</h1>
 20 <h2>原生ajax_GET请求</h2>
 21
 22 <a class="ajaxsubmit1">点击提交</a>
 23
 24 <h2>原生ajax_POST请求</h2>
 25
 26 <a class="ajaxsubmit2">点击提交</a>
 27
 28 <hr>
 29
 30 <h2>基于iframe+Form表单伪造ajax</h2>
 31 <div>
 32     <iframe id="iframe" name="ifra"></iframe>
 33     <form id="fm" action="/ajax1.html" method="post" target="ifra">
 34         <input type="text" name="user" value="heilong">
 35         <a class="ajaxsubmit3">点击提交</a>
 36     </form>
 37 </div>
 38
 39 <hr>
 40 <h1>上传文件jquery方式</h1>
 41 <input type="file" id="img">
 42 <a class="ajaxsubmit4">点击上传</a>
 43
 44 <h1>上传文件原生ajax方式</h1>
 45 <input type="file" id="img1">
 46 <a class="ajaxsubmit5">点击上传</a>
 47
 48 <h1>上传文件iframe+form方式</h1>
 49 <iframe style="display: none" id="iframe1" name="ifra1"></iframe>
 50 <form id="fm2" action="/ajax1.html" method="post" enctype="multipart/form-data" target="ifra1">
 51     <input type="text" name="k1" value="v1">
 52     <input type="text" name="k2" value="v2">
 53     <input type="file" name="k3" id="img1">
 54     <a class="ajaxsubmit6">点击上传</a>
 55 </form>
 56
 57
 58 <script src="{% static ‘jquery-3.1.1.js‘ %}"></script>
 59 <script>
 60     $(".ajaxsubmit1").bind("click", function () {
 61         var xhr = new XMLHttpRequest();
 62         xhr.open("GET", "/ajax1.html?p=123");
 63         xhr.onreadystatechange = function () {
 64             if (xhr.readyState == 4) {
 65                 console.log(xhr.responseText);
 66             }
 67         };
 68         xhr.send(null);
 69     });
 70
 71     $(".ajaxsubmit2").bind("click", function () {
 72         var xhr = new XMLHttpRequest();
 73         xhr.open("POST", "/ajax1.html");
 74         xhr.onreadystatechange = function () {
 75             if (xhr.readyState == 4) {
 76                 console.log(xhr.responseText);
 77             }
 78         };
 79         xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset-UTF-8");
 80         xhr.send("p=456");
 81     });
 82
 83     function reloadiframe() {
 84         var content = $(this).contents().find("body").text();
 85         console.log(content);
 86         var content_obj = JSON.parse(content);
 87         console.log(content_obj);
 88         if (content_obj.status) {
 89             console.log(content_obj.message);
 90         }
 91     }
 92
 93     $(".ajaxsubmit3").bind("click", function () {
 94         $("#iframe").bind("load", reloadiframe);
 95         $("#fm").submit();
 96     });
 97
 98     $(".ajaxsubmit4").bind("click", function () {
 99         var data = new FormData();
100         data.append("k1", "v1");
101         data.append("k2", "v2");
102         var file_obj = $("#img")[0].files[0];
103         data.append("k3", file_obj);
104
105         $.ajax({
106             url: "/ajax1.html",
107             type: "POST",
108             data: data,
109             success: function (arg) {
110                 console.log(arg);
111             },
112             processData: false,
113             contentType: false
114         })
115     });
116
117     $(".ajaxsubmit5").bind("click", function () {
118         var data = new FormData();
119         data.append("k1", "v1");
120         data.append("k2", "v2");
121         var file_obj = $("#img1")[0].files[0];
122         data.append("k3", file_obj);
123
124         var xhr = new XMLHttpRequest();
125         xhr.open("POST", "/ajax1.html");
126         xhr.onreadystatechange = function () {
127             if (xhr.readyState == 4) {
128                 console.log(xhr.responseText);
129             }
130         };
131         xhr.send(data);
132     });
133
134     function reloadiframe1() {
135         var content = $(this).contents().find("body").text();
136         var content_obj = JSON.parse(content);
137         console.log(content_obj);
138     }
139
140     $(".ajaxsubmit6").bind("click", function () {
141         $("#iframe1").bind("load", reloadiframe1);
142         $("#fm2").submit();
143     });
144 </script>
145
146 </body>
147 </html>

原生Ajax及伪Ajax简单事例(包含文件上传)

五、跨域Ajax

时间: 2024-10-24 22:21:45

python开发之【Ajax】的相关文章

python自动开发之(ajax)第二十天

1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() /detail/(\d+) -> 函数(参数) 或 类.as_view()(参数) /detail/(?P<nid>\d+) -> 函数(参数) 或 类.as_view()(参数) /detail/ -> include("app01.urls") /detai

python开发之路

Python开发[一]初识Python Python开发[二]基本数据类型 python开发[三]文件管理 python开发[四]函数

Python 开发之路

目录 Python开发[第二篇]:初识Python Python开发[第三篇]:Python基本数据类型

python开发之路SocketServer

SocketServer与客户端进行连接的示意图: 只要客户端连接进来,我们就为客户端创建1个线程或进程,创建完成之后,客户端直接和创建的线程直接进行通信(即3和4步),因此这样的话可以通过这个模块传输大的文件. 1.基于线程版本的SocketServer示例 server.py #!/usr/bin/env python # -*- coding:utf-8 -*- import SocketServer class MyServer(SocketServer.BaseRequestHandl

python开发之路1---多并发Ftp的开发

一.事前准备 1.新建1个project,我这里起的名字是:day9-1. 2.在day9-1目录下,New 2个Python Package:CrazyFtp和CrazyFtpClient,分别用于存放客户端.服务器端的目录及文件. 3.然后分别在服务器端.客户端Package目录下面,新建文件和目录,具体如下: CrazyFtp bin(用户存放可执行程序目录) crazy_ftp_server.py conf(用于存放配置文件) settings.py modules(用于存放主文件目录)

Hybrid App开发之Ajax在JQuery中的应用

前言: 今天学习一下如何通过Ajax与服务器进行交互,并且学习一下如何在JQuery中使用. 首先先了解一下什么是ajax? AJAX即"Asynchronous,Javascript+XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX=异步JavaScript和XML(标准通用标记语言的子集).AJAX是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情

python开发之Tkinter可视化

引言: 1.Tkinter 模块是python的标准Tk GUI工具包的接口,是python的内置模块,直接导入即可. 2.Tkinter 在python2和python3中的变化较大,在python2中叫Tkinter,在python3中叫tkinter . 3.本文是在python2.7版本测试 一.创建第一个窗口 from Tinter import * #导入Tkinter这个模块 root=Tk() #对Tk这个类实例话 root.mainloop() #进行事件循环 注: Tk类代表

jQuery开发之Ajax

1,load()方法 (1)load()方法是jQuery中最常用和最简单的Ajax方法,能载入远程HTML代码,并插入代码中.它的结构为: load(url [,data] [,callback]) load()方法解释如下表所示 示例代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> &

php开发之AJAX一

AJAX这个东东前两天刚刚接触到,听别人说挺有用的哦,觉的有必要学一下. 下面就通过get方法传递参数到php页面为例来说一下: test.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="