• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Django 通过JS实现ajax过程详解

python 搞代码 4年前 (2022-01-09) 23次浏览 已收录 0个评论

ajax的优缺点

AJAX使用Javascript技术向服务器发送异步请求

AJAX无须刷新整个页面

因为服务器响应内容不再是整个页面,而是页面中的局部,所以AJAX性能高

小练习:计算两个数的和

方式一:这里没有指定contentType:默认是urlencode的方式发的

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width">
  <title>Title</title>
  <script src="/static/jquery-3.2.1.min.js"></script>
  <script src="http://apps.bdimg.com/libs/jquery.cookie/1.4.1/jquery.cookie.js"></script>
</head>
<body>
<h1>计算两个数的和,测试ajax</h1>
<input type="text" class="num1">+<input type="text" class="num2">=<input type="text" class="ret">
<button class="send_ajax">sendajax</button>

<script>
  $(".send_ajax").click(function <strong>本文来源gaodai#ma#com搞@@代~&码*网2</strong>() {
     $.ajax({
      url:"/sendAjax/",
      type:"post",
      headers:{"X-CSRFToken":$.cookie('csrftoken')},  
      data:{
        num1:$(".num1").val(),
        num2:$(".num2").val(),
      },
      success:function (data) {
        alert(data);
        $(".ret").val(data)
      }
    })
  })

</script>
</body>
</html>

views.py

def index(request):
  return render(request,"index.html")

def sendAjax(request):
  print(request.POST)
  print(request.GET)
  print(request.body) 
  num1 = request.POST.get("num1")
  num2 = request.POST.get("num2")
  ret = float(num1)+float(num2)
  return HttpResponse(ret)

方式二:指定conentType为json数据发送:

<script>
  $(".send_ajax").click(function () {
     $.ajax({
      url:"/sendAjax/",
      type:"post",
      headers:{"X-CSRFToken":$.cookie('csrftoken')},  //如果是json发送的时候要用headers方式解决forbidden的问题
      data:JSON.stringify({
        num1:$(".num1").val(),
        num2:$(".num2").val()
      }),
      contentType:"application/json", //客户端告诉浏览器是以json的格式发的数据,所以的吧发送的数据转成json字符串的形式发送
      success:function (data) {
        alert(data);
        $(".ret").val(data)
      }
    })
  })

</script>

views.py

def sendAjax(request):
  import json
  print(request.POST) #<QueryDict: {}>
  print(request.GET)  #<QueryDict: {}>
  print(request.body) #b'{"num1":"2","num2":"2"}' 注意这时的数据不再POST和GET里,而在body中
  print(type(request.body.decode("utf8"))) # <class 'str'>
  # 所以取值的时候得去body中取值,首先得反序列化一下
  data = request.body.decode("utf8")
  data = json.loads(data)
  num1= data.get("num1")
  num2 =data.get("num2")
  ret = float(num1)+float(num2)
  return HttpResponse(ret)

JS实现的ajax

其实AJAX就是在Javascript中多添加了一个对象:XMLHttpRequest对象。所有的异步交互都是使用XMLHttpServlet对象完成的。也就是说,我们只需要学习一个Javascript的新对象即可。

var xmlHttp = new XMLHttpRequest();//(大多数浏览器都支持DOM2规范)

注意,各个浏览器对XMLHttpRequest的支持也是不同的!为了处理浏览器兼容问题,给出下面方法来创建XMLHttpRequest对象:

function createXMLHttpRequest() {
    var xmlHttp;
    // 适用于大多数浏览器,以及IE7和IE更高版本
    try{
      xmlHttp = new XMLHttpRequest();
    } catch (e) {
      // 适用于IE6
      try {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        // 适用于IE5.5,以及IE更早版本
        try{
          xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){}
      }
    }      
    return xmlHttp;
  }

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Django 通过JS实现ajax过程详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址