AJAX简介

什么是AJAX

  • AJAX = 异步JavaScript 和 XML(Asynchronous JavaScript and XML)
  • 通过在后台于服务器进行少量数据交换,AJAX可以使网页实现异步更新.这意味着可以在不重载整个页面的情况下,对网页的某部分进行更新

AJAX参数

url:提交表单内容到views里的某个函数

type:提交方式(POST或GET)

data:提交到后台的数据,将自动转换成字符串格式

dataType:指定数据处理方式(XML,HTML,JSON,JSONP,Scrit,Text)

回调函数(callback):处理$.ajax()得到的数据

  • beforesend:在发送请求之前调用,并且转入一个XMLHttpRequest作为参数
  • error:在请求出错时调用.传入XMLHttpRequest对象,描述错误类型的字符串以及一个异常对象(如果有的话)
  • dataFilter:在请求成功之后调用.传入返回的数据以及dataType参数的值.并且必须返回新的数据(可能是处理过的)传递给success回调函数
  • success:当请求之后调用,传入返回后的数据,以及包含成功代码的字符串
  • complate:当请求成功之后调用,无论成功或失败.传入XMLHttpRequest对象,以及一个包含成功或错误代码的字符串

一个简单的ajax示例

定义urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
]

定义views.py

from django.shortcuts import render,HttpResponse
import json
# Create your views here. def login(request): #通过request参数接收前端ajax传过来的数据(格式是:{"user": "111","pwd":"111"})
if request.method == 'POST':
ret = {'status':False}
user = request.POST.get('user',None)
pwd = request.POST.get('pwd',None)
if user == '' and pwd == '':
ret['status'] =True
return HttpResponse(json.dumps(ret),content_type="application/json") #这里是后端处理数据,如果前段输入正确就把status置为true
else:
ret['status'] = False
return HttpResponse(json.dumps(ret),content_type="application/json")
return render(request,'login.html')

定义login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
  <form id="jsStayForm">
<div>
<input type="text" name="user"/>
</div>
<div>
<input type="password" name="pwd"/>
</div>
<input type="button" value="提交" onclick="SubmitForm()"/>
{% csrf_token %}
  </form> <script src="/static/jquery.min.js"></script> <script>
function SubmitForm() {
$.ajax({
url: "{% 'url' 'add_ask' %}",
type: 'POST',
data: $('#jsStayForm').serialize() #自动获取id为jsStayForm表单的内容,然后序列化成json格式,比如{"user": "111","pwd":"111"},提交到后端
dataType: 'json',
success: function (callback) { #success函数是后端处理完数据之后,return回来一个http响应,callback是形参,接收后端传回来的数据,这里就是return HttpResponse(json.dumps(ret))之后就执行success部分的函数,
if (callback['status']) {
console.log('登录成功')
location.href = "http://www.baidu.com";
} else { alert('用户名或密码错误')
}
}
})
}
</script>

处理流程

  1. 当用户点击提交按钮之后,触发JavaScript的SubmitForm函数
  2. SubmitForm函数获取用户在input的标签输入的值,并组合成一个字典,例如:{"user":1111,"pwd":222}
  3. ajax把input_dict字典传到后端views中的login函数
  4. views中的login函数通过request这个形参接收ajax传过来的input_dict字段
  5. login函数进行判断,如果判断输入正确就把ret字典的status置为true("status":true),然后return给ajax,否则置为FALSE({"status":false}),然后return 给ajax
  6. ajax如果发现有状态吗为200的返回就执行success函数
  7. success函数通过callback这个形参接收后端给传过来的ret字典

ajax设置request对象header

背景:要给后端传数据,但不是把数据写在form表单里,是直接通过ajax提交数据,所以要在提交数据前设置request的header,加上csrf_token

ajax代码

function add_fav(current_elem, fav_id, fav_type){
$.ajax({
cache: false,
type: "POST",
url:"{% url 'org:add_fav' %}",
data:{'fav_id':fav_id, 'fav_type':fav_type},
async: true,
beforeSend:function(xhr, settings){
xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}");
},
success: function(callback) { if(callback['status'] == 'fail'){
if(callback['msg'] == '用户未登录'){
window.location.href="{% url 'login' %}";
}else{
alert(callback['msg'])
} }else if(callback['status'] == 'success'){
current_elem.text(callback['msg'])
}
},
});
}

Django学习系列之结合ajax的更多相关文章

  1. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  2. Django学习系列6:使用selenium测试用户交互

    学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...

  3. Django学习系列之Form表单结合ajax

      Forms结合ajax Forms的验证流程: 定义用户输入规则的类,字段的值必须等于html中name属性的值(pwd= forms.CharField(required=True)=<i ...

  4. django学习系列——python和php对比

    python 和 php 我都是使用过,这里不想做一个非常理性的分析,只是根据自己的经验谈一下感想. 在web开发方面,无疑 php 更甚一筹. 从某种角度来说,php 就是专门为 web 定制的语言 ...

  5. Django学习系列之Python+Xadmin

    项目树 引入xadmin pycharm在项目中创建存放xadmin的目录 右键项目名称-->pythonpackage-->输入名称:extra_app 拷贝xadmin代码到extra ...

  6. Django学习系列之django restframework

    曾几何时,Ajax已经统治了Web开发中的客户端,而REST成为web世界中最流行的架构风格(architecture style).所以我们的选择变得很简单:前端ajax访问后端的RESTful A ...

  7. Django学习系列之CSRF

    Django CSRF 什么是CSRF CSRF, Cross Site Request Forgery, 跨站点伪造请求.举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果 某个用户已经登录到 ...

  8. Django学习系列之Form验证

    django表单基础 django表单分类 基于django.forms.Form:所有表单类的父类 基于django.forms.ModelForm:可以和模型类绑定的Form Form验证流程 定 ...

  9. Django学习系列13:Django ORM和第一个模型

    ORM—对象关系映射器,是一个数据抽象层,描述存储在数据库中的表,行和列.处理数据库时,可以使用熟悉的面向对象方式,写出更好的代码. 在ORM的概念中,类对应数据库中的表,属性对应列,类的单个实例表示 ...

随机推荐

  1. JS获取服务器端控件ID

    很多时候我们需要在JS中对服务器端控件进行一些简单处理,但是这个时候没有必要回发到服务器,让服务器去处理,这个时候就又要用到JS了 那么怎么去获取这个服务器端控件呢?我们知道服务器最终返回到用户界面的 ...

  2. Tinking in Java ---Java的NIO和对象序列化

    前面一篇博客的IO被称为经典IO,因为他们大多数都是从Java1.0开始就有了的:然后今天这篇博客是关于NIO的,所以的NIO其实就是JDK从1.4开始,Java提供的一系列改进的输入/输出处理的新功 ...

  3. 一台机器运行多个JBoss多实例

    JBossXMLJVMTomcat应用服务器  我们经常会遇到这种情况,有时候希望在同一台机器上部署若干个JBoss实例,上面运行不同的应用程序,这样的话无论由于什么原因需要对某个JBoss实例进行关 ...

  4. 分析HTTP 2.0与HTTP 1.1区别

    1.什么是HTTP 2.0 HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网.HTTP/2是HTTP协议自1999年HTTP 1.1发布 ...

  5. org.springframework.orm.hibernate4.support.OpenSessionInterceptor

    /* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Vers ...

  6. bash - GNU Bourne-Again SHell

    概述(SYNOPSIS) bash [options] [file] 版权所有(COPYRIGHT) Bash is Copyright (C) 1989-2002 by the Free Softw ...

  7. viewer && ImageFlow 图片滚动组件 图片点击放大 可以滚轮放大缩小 viewer

    ImageFlow https://finnrudolph.com/products/imageflow https://github.com/countzero/ImageFlow http://w ...

  8. Java基础(十一)--Serializable和Externalizable接口实现序列化

    序列化在日常开发中经常用到,特别是涉及到网络传输的时候,例如调用第三方接口,通过一个约定好的实体进行传输,这时你必须实现序列 化,这些都是大家都了解的内容,所以文章也会讲一下序列化的高级内容. 序列化 ...

  9. TX-LCN事务控制原理

    TX-LCN由两大模块组成, TxClient.TxManager,TxClient作为模块的依赖框架,提供TX-LCN的标准支持,TxManager作为分布式事务的控制方.事务发起方或者参与方都由T ...

  10. python selenium等待特定网页元素加载完毕

    selenium等待特定元素加载完毕 is_disappeared = WebDriverWait(driver, 8, 0.5, ignored_exceptions=TimeoutExceptio ...