一、基于jQuery的ajax

此时需要在模板中引用jQuery,ajax的本质是利用浏览器自带的XMLHttpRequest对象并通过jQuery将数据和请求头进行封装再发送。ajax基本使用方法如下:

$.ajax({
url:'url',
type:'POST',
data:{'k1':v1,'k2':v2,},
dataType:'JSON',
traditional:true,
success:function (arg) {
}
error:function () {
}
})

整个ajax的内容包含在$.ajax({  })中

第一行url:指定ajax发送给哪个url进行处理,再通过urls.py文件去执行对应的处理函数

第二行type:ajax发送数据的方式,可以是GET或者POST,如果使用POST方法可先注释掉csvf中间件

第三行data:ajax发送的数据,需要是字典格式,且v默认是数字或者字符串

第六行success:表示后台处理函数处理成功后,前端再执行的函数,参数arg表示处理函数的返回值,即HttpResponse的返回值,且只能接收字符串格式

第四行dataType:由于success的function函数默认只能接收字符串格式的返回值,因此如果处理函数需要返回其他格式如字典、列表形式的值,需要通过HttpResponse(json.dumps(返回值))传递给arg,而在ajax中需要再通过JSON.parse(arg)再将返回值还原为原来的格式,而dataType:'JSON'可以省略前端的JSON.parse(arg),直接将返回值通过JSON还原为原来的格式后再传递给arg。

第五行traditional:ajax发送的数据字典的值默认是数字或者字符串,如果值是列表(不能是字典),则需要指定traditional:true

第七行error:例如当指定的url错误、网络错误等,会执行此函数。

ajax不接收处理函数返回的redirect跳转,只会根据函数返回的消息内容主动决定是否做刷新或跳转。

1.ajax发送get请求

.btn{display:inline-block;background-color: darkgoldenrod;padding: 5px 10px;color: white;cursor: pointer}
……
<a class="btn" onclick="ajaxSubmit3()">点我</a>
……
function ajaxSubmit3() {
$.ajax({
url:'ajax1',
type:'POST',
data:{'p':123},
dataType:'json',
success:function (arg) {
console.log(arg.status,arg.data)
}
})
}

模板和使用ajax发送get请求

def ajax1(request):
print(request.GET)
ret = {'status':'success','data':[1,'hello']}
return HttpResponse(json.dumps(ret))

后台处理函数

     

2.ajax发送post请求

<a class="btn" onclick="ajaxSubmit3()">点我</a>
……
function ajaxSubmit3() {
$.ajax({
url:'ajax1',
type:'POST',
data:{'p':123},
dataType:'json',
success:function (arg) {
console.log(arg.status,arg.data)
}
})
}
def ajax1(request):
print(request.POST)
ret = {'status':'success','data':[1,'hello']}
return HttpResponse(json.dumps(ret))

后台处理函数

     

二、使用浏览器自带的XMLHttpRequest对象

XMLHttpRequest为浏览器自带的发送数据的对象,使用XMLHttpRequest发送数据时,需要手动加上请求头。

XmlHttpRequest对象的主要方法:

void open(String method,String url,Boolen async)  #用于创建请求
method: 请求方式(字符串类型),如:POST、GET、DELETE...
url:要请求的地址(字符串类型)
async: 是否异步(布尔类型) void send(String body) #用于发送请求
body: 要发送的数据(字符串类型) void setRequestHeader(String header,String value) #用于设置请求头
header: 请求头的key(字符串类型)
vlaue: 请求头的value(字符串类型) String getAllResponseHeaders() #获取所有响应头
返回值:响应头数据(字符串类型) String getResponseHeader(String header) #获取响应头中指定header的值
header: 响应头的key(字符串类型)
返回值:响应头中指定的header对应的值 void abort() #终止请求

XmlHttpRequest对象主要方法

Number readyState  #状态值(整数)
0-未初始化,尚未调用open()方法;
1-启动,调用了open()方法,未调用send()方法;
2-发送,已经调用了send()方法,未接收到响应;
3-接收,已经接收到部分响应数据;
4-完成,已经接收到全部响应数据; Function onreadystatechange
当readyState的值改变时自动触发执行其对应的函数(回调函数) String responseText
服务器返回的数据(字符串类型) XmlDocument responseXML
服务器返回的数据(Xml对象)

XmlHttpRequest对象主要属性

1.XMLHttpRequest发送get请求

<a class="btn" onclick="ajaxSubmit2()">点我</a>
……
function ajaxSubmit2() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4)
console.log(xhr.responseText);
}
xhr.open('GET','ajax1');
xhr.send(null);
}

模板和使用XMLHttpRequest发送get请求

def ajax1(request):
print(request.GET)
print(request.body)
ret = {'status':'success','data':[1,'hello']}
return HttpResponse(json.dumps(ret))

后台处理函数

2.XMLHttpRequest发送POST请求

<a class="btn" onclick="ajaxSubmit4()">点我</a>
……
function ajaxSubmit4() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4)
console.log(xhr.responseText);
}
xhr.open('POST','ajax1');
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset-UTF-8');
xhr.send('p=123;q=456');
}

模板和使用XMLHttpRequest发送post请求

def ajax1(request):
print(request.POST)
print(request.body)
ret = {'status':'success','data':[1,'hello']}
return HttpResponse(json.dumps(ret))

后台处理函数

①发送post请求时需要先注释掉csvf中间件

②XMLHttpRequest对象xhr状态变化时即xhr.readyState的值变化时,会触发xhr.onreadystatechange。

③如果不为XMLHttpRequest对象设置请求头,那么后台接收到的数据在request.body中,request.POST中没有数据;需要用setRequestHeader()方法为其设置请求头,django才会将接收到的数据同时转化到request.POST中。

④使用send()发送数据时,整体为字符串,使用k=v形式发送,多个数据之间用分号间隔;

   

ajax基本用法介绍的更多相关文章

  1. Ajax.ActionLink 用法

    Ajax.ActionLink 用法 Ajax 属性的ActionLink方法可以创建一个具有异步行为的锚标签. ActionLink方法的第一个参数指定了链接文本,第二个参数是要异步调用的操作的名称 ...

  2. richface的配置、用法介绍和注意事项

    richface的配置.用法介绍和注意事项一.RichFaces (3.1.x) 技术需求 1.JDK 1.5 或更高版本: 2.支持的 JSF 实现: Sun JSF 1.1 RI - 1.2 My ...

  3. XMLHttpRequest用法介绍

    前言: 传统的Web应用请求服务器返回的一般是是完整的HTML页面,这样往往就需要页面进行刷新操作,不仅耗时而且用户体验度也不好.最典型的代表就是form表单登录操作了.如果登录失败往往是跳转到原网页 ...

  4. AJAX初探,XMLHttpRequest介绍

    AJAX初探,XMLHttpRequest介绍 AJAX      AJAX = Asynchronous JavaScript and XML. 异步的JavaScript和XML.      AJ ...

  5. 好压(HaoZip)的命令行模式用法介绍

    好压压缩软件,又叫“2345好压”,是一款国产的优秀压缩软件,目前是免费的,据官网介绍,该软件永久免费.官网地址:http://haozip.2345.com/ 本文主要对该软件的命令行模式用法进行介 ...

  6. sql事务(Transaction)用法介绍及回滚实例

    sql事务(Transaction)用法介绍及回滚实例 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务, S ...

  7. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  8. 怎么通过activity里面的一个按钮跳转到另一个fragment(android FragmentTransaction.replace的用法介绍)

    即:android FragmentTransaction.replace的用法介绍 Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最 ...

  9. JQuery中的AJAX参数详细介绍

    Jquery中AJAX参数详细介绍 参数名 类型 描述 url String    (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方 ...

随机推荐

  1. JS判断字符串长度的5个方法(区分中文和英文)

    目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: 代码如下: String.prototype.gblen = function() {    var len = 0;    fo ...

  2. python之str字符串

    字符串是python非常重要的数据类型,它是一个序列(列表和元组也是序列),有下标,可以通过下标遍历字符串序列:同时字符串也是一个不可变数据类型,每次使用"+"拼接字符串时都会产生 ...

  3. jmeter 之系统参数根据条件修改

    背景:在setup 线程组定义了一个全局变量a:${__setProperty(a,2,)},线程组里有两个线程通过判断a的值来决定是否执行sample,线程组的最后通过beanshell sampl ...

  4. Java反射机制概念及应用场景

    Java的反射机制相信大家在平时的业务开发过程中应该很少使用到,但是在一些基础框架的搭建上应用非常广泛,今天简单的总结学习一下. 1. 什么是反射机制? Java反射机制是在运行状态中,对于任意一个类 ...

  5. ADB——adb devices unauthorized

    我们只有在手机打开USB调试,并且允许电脑对其进行调试的前提下才可以用ADB进行自动化操作手机,如果出现unauthorized提示的话就是说明手机没有允许电脑对其调试 这个时候通常手机回弹出允许调试 ...

  6. 移动iptv安装三方软件

    1.思路:  分为硬件和软件. a.硬件是ttl直接上串口,弄得比较复杂,且容易损坏盒子,先不考虑 b.软件:抓包获取iptv的请求数据,将移动光猫的iptv出口接到交换机上,电脑和盒子接入到同一个交 ...

  7. app ios info权限配置:

    info权限配置: Privacy - Bluetooth Peripheral Usage Description --> App需要您的同意,才能访问蓝牙 Privacy - Calenda ...

  8. 接口自动化框架(java)--1.项目概述

    项目github地址: https://github.com/tianchiTester/API_AutoFramework 这套框架的报告是自己封装的 1.测试基类TestBase: 接口请求的te ...

  9. H.264学习--1

    1.宏块(Macro Block):一个编码图像首先要划分成多个块(4x4 像素)才能进行处理,显然宏块应该是整数个块组成,通常宏块大小为                               ...

  10. hibernate一级缓存及对象的状态

    hibernate中实体类对象的状态 在hibernate中实体类对象有三种状态 (1)瞬时态(临时态) 瞬时态:即我们自己创建一个对象,还没有保存到数据库就叫临时态,其实也可以说是对像没有id值,跟 ...