基于jQuery实现的Ajax(Django环境)

概览:Ajax(Asynchronous Javascript And XML)

解释为Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。

同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;

异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。

向服务器发送请求的四个途径:

1.浏览器地址栏,默认get请求

2.form表单

get请求

post请求

3.a标签,默认get请求

4.Ajax请求

特点:

异步请求

局部刷新

get

post

基于jquery的Ajax的实现(以下均省略urls.py,自行添加)

cdn链接:<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

简单流程:

  1: <script>
  2:     $(".Ajax").click(function () {
  3:         //发送Ajax的请求的简单流程
  4:         $.ajax({
  5:             url:"",    //请求url
  6:             type:"get", //请求方式post
  7:             success:function(data){ //回调函数
  8:                 console.log(data) //data就是传来的数据
  9:             }
 10:         })
 11:     });
 12: </script>

Ajax传递数据:

index.html

  1: <input type="text" id="num1">+<input type="text" id="num2">=<input type="text" id="ret"> <button class="cal">计算</button>
  2: <script>
  3:     $(".cal").click(function () {
  4:         $.ajax({
  5:             url: "/cal/",
  6:             type: "post",
  7:             data: {
  8:                 "n1":$("#num1").val(),
  9:                 "n2":$("#num2").val(),
 10:             },
 11:             success:function (data) {
 12:                 console.log(data);
 13:                 $("#ret").val(data);
 14:             }
 15:         })
 16:     });
 17: </script>

views.py

  1: def cal(request):
  2:
  3:     n1 = int(request.POST.get("n1"))
  4:     n2 = int(request.POST.get("n2"))
  5:     ret = n1 + n2
  6:     return HttpResponse(ret)

基于Ajax的登录验证

  1: <form>
  2:     用户名 <input type="text" id="user">
  3:     密码 <input type="password" id="pwd">
  4:     <input type="button" value="submit" class="login_btn"><span class="error"></span>
  5: </form>
  6: <script>
  7:     $(".login_btn").click(function () {
  8:         $.ajax({
  9:             url:"/login/",
 10:             type:"post",
 11:             data:{
 12:                 "user":$("#user").val(),
 13:                 "pwd":$("#pwd").val(),
 14:             },
 15:             success:function (data) {
 16:                 console.log(data);
 17:                 // data->json字符串
 18:                 // 反序列化->object {}
 19:                 var data = JSON.parse(data);
 20:                 if (data.user){
 21:                     location.href="http://www.baidu.com"
 22:                 }
 23:                 else {
 24:                     $(".error").html(data.msg).css({"color": "red", "margin-left": "10px"})
 25:                 }
 26:             }
 27:         })
 28:     });
 29: </script>

models.py

  1: class User(models.Model):
  2:     name = models.CharField(max_length=32)
  3:     pwd = models.CharField(max_length=32)

views.py

  1: from app01.models import User
  2: def login(request):
  3:
  4:     print(request.POST)
  5:     user = request.POST.get("user")
  6:     pwd = request.POST.get("pwd")
  7:     userobj = User.objects.filter(name=user, pwd=pwd).first()
  8:     res = {"user": None, "msg": None}
  9:     if userobj:
 10:         res["user"] = userobj.name
 11:     else:
 12:         res["msg"] = "wrong!"
 13:     import json
 14:     return HttpResponse(json.dumps(res))

基于form表单的文件上传

file_put.html

  1: <h3>基于form表单的文件上传</h3>
  2: <form action="" method="post" enctype="multipart/form-data">
  3:     用户名 <input type="text" name="user">
  4:     头像 <input type="file" name="avatar">
  5:     <input type="submit" >

views.py

  1: def file_put(request):
  2:
  3:     if request.method == "POST":
  4:         print(request.POST)
  5:         print(request.FILES)
  6:         file_obj = request.FILES.get("avatar")
  7:         with open(file_obj.name, "wb") as f:
  8:             for line in file_obj:
  9:                 f.write(line)
 10:
 11:         return HttpResponse("OK")
 12:
 13:     return render(request, "file_put.html")

请求头ContentType

ContentType指的是请求体的编码类型,常见的类型共有3种:

1 application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):

2 multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让表单的 enctype 等于 multipart/form-data。

3 application/json
application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。

基于Ajax的文件上传

html文件

  1: <body>
  2: <h3>基于Ajax的文件上传</h3>
  3:
  4: <form action="" method="post" enctype="multipart/form-data">
  5:     用户名 <input type="text" id="user">
  6:     头像 <input type="file" id="avatar">
  7:     <input type="button" class="btn" value="Ajax">
  8: </form>
  9: <script>
 10:     $(".btn").click(function () {
 11:         var formdata = new FormData();
 12:         formdata.append("user", $("#user").val());
 13:         formdata.append("avatar", $("#avatar")[0].files[0]);
 14:         $.ajax({
 15:             url:"",
 16:             type:"post",
 17:             contentType:false,
 18:             processData:false,
 19:             data:formdata,
 20:             success:function (data) {
 21:                 console.log(data);
 22:             }
 23:         });
 24:     });
 25: </script>
 26: </body>

views.py

  1: def file_put(request):
  2:
  3:     if request.method == "POST":
  4:         print("body-->", request.body)
  5:         print("POST-->", request.POST)
  6:         print(request.FILES)
  7:         # dowload file code
  8:         # file_obj = request.FILES.get("avatar")
  9:         # with open(file_obj.name, "wb") as f:
 10:         #     for line in file_obj:
 11:         #         f.write(line)
 12:
 13:         return HttpResponse("OK")
 14:
 15:     return render(request, "index.html")

原文地址:https://www.cnblogs.com/haoqirui/p/10189825.html

时间: 2024-10-28 11:21:46

基于jQuery实现的Ajax(Django环境)的相关文章

拥抱基于jquery.deferred的ajax,和层层嵌套回调的ajax说拜拜

前言 在项目中,无论是维护自己的代码,还是重构他人的项目代码,看到层层嵌套,异常冗余的某个function,那时我们的内心肯定是奔溃的! 在jquery1.5版本之前,如果我们某个操作需要多个ajax异步请求成功后执行,只能在前一个ajax成功的回调函数中接着发送ajax请求,这样一来,不光代码的可读性变得异常差,而且也失去了异步的意义. jquery开发者果然在1.5版本后引入了deferred延迟对象.而jquery.ajax也基于它迎来了巨变,我们先对比下有哪些区别. 传统ajax和现代a

基于jquery框架的ajax搜索显示

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>search_project.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta h

基于JQuery框架的AJAX实例代码

<html> <head> <title>jQuery Ajax 实例演示</title> </head> <script src="./js/jquery.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function(){

基于jQuery实现的Ajax 验证用户名唯一性

JSP部分代码: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <%@include file="/common/header.jsp"%> <title>用户管理</title> <script type="text/javascript&quo

基于jquery开发的UI框架整理分析

根据调查得知,现在市场中的UI框架差不多40个左右,不知大家都习惯性的用哪个框架,现在市场中有几款UI框架稍微的成熟一些,也是大家比较喜欢的一种UI框架,那应该是jQuery,有部分UI框架都是根据jQuery研发出来的产品,现在也很常见了. 国产jQuery UI框架 (jUI) DWZ DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架.设计目标是简单实用,快速开发,降低ajax开发成本. jQuery 部件布局

基于jquery的ajax分页插件(demo+源码)

前几天打开自己的博客园主页,无意间发现自己的园龄竟然有4年之久了.可是看自己的博客列表却是空空如也,其实之前也有写过,但是一直没发布(然而好像并没有什么卵用).刚开始学习编程时就接触到博客园,且在博客园学习了很多的知识,看过很多人的分享.说来也惭愧,自己没能为园友们分享自己的所学所得(毕竟水平比较差). 过去的一年也是辗转了几个城市换了几份工作(注定本命年不太平?).八月份来到现在所在的公司(OTA行业),公司是做互联网的,所以可能大家的前端都屌屌的?之前一直从事.NET开发(现在在这边也是),

ajax - 基于jQuery的介绍

Ajax基础补充 XMLHttpRequest对象有以下属性和操作 属性: onreadystatechange readyState status 操作: jQuery的ajax操作,常用函数如下: $.ajax([options]) //底层的ajax方法 $.get(url, [data], [fn], [type]) //基于get的ajax $.post(url, [data], [fn], [type]) //基于post的ajax load(url, [data], [callba

基于Jquery+Ajax+Json+高效分页

首先我们创建一般处理程序,来读取数据库中内容,得到返回值. 创建文件,GetData.ashx. 我这里是用的存储过程,存储过程会再下面粘出来,至于数据只是实例,你们可根据需求自行读取数据 代码如下: <%@ WebHandler Language="C#" Class="GetData"%> using System;using System.Web;using System.Data.SqlClient;using System.Data;using

份-城市,基于jQuery的AJAX二级联动,用Struts2整合AJAX【非数据库版】

package loaderman.provincecity; import java.io.IOException; import java.util.LinkedHashSet; import java.util.Set; import com.opensymphony.xwork2.ActionSupport; /** * 控制器 * @author AdminTC */ public class ProvinceCityAction extends ActionSupport{ priv