首页 > Web开发 > 详细

Django 之Ajax

时间:2018-01-30 20:47:41      阅读:261      评论:0      收藏:0      [点我收藏+]

介绍

Ajax

  AjaxAsynchronous Javascript And XML)翻译成中文就是异步JavascriptXML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

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

  Ajax除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)。因此使用ajax的主要特点有如下几点:(1)Ajax使用Javascript技术向服务器发送异步请求;(2)Ajax无须刷新整个页面;(3)因为服务器响应内容不再是整个页面,而是页面中的局部,所以Ajax性能高。在django入门项目中我们已经简单的介绍了一下ajax应用。下面我们将做详细介绍。

Ajax的优缺点

优点:

Ajax使用JavaScript技术向服务器发送异步请求;

Ajax无须刷新整个页面,提高用户的体验度

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

关于AJAX的例子

ajax实现方式(无参数)

  具体实现方式实例如下(完成一次ajax请求,且完成了一个局部刷新):

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, initial-scale=1">
    <title>Title</title>
    <script src="/static/js/jquery-3.2.1.min.js"></script>
</head>
<body>
<h3>INDEX</h3>
<button class="s1">send_ajax</button>
<p class="name"></p>

<script>
    // ajax的无参请求
    $(".s1").click(function () {
        // 触发ajax事件
        $.ajax({
            url: "/ajax_handle/",
            type: "get",
            success: function (data) {   {# data相当于服务端拿过来的"黎诗"的数据 #}
{#  当某一个事件完成之后,固定执行另外一个函数      #}
{#  在这里success也相当于一个回调函数, 当我们请求过去,到达服务器,
服务器响应过来return HttpResponse(
"黎诗"),这里success开始工作 ,把数据响应到客户端 这样就是完整的过程 #} console.log(data); {# 完成一次ajax请求,且完成了一个局部刷新#} $(".name").html(data) {# 把一个data字符串赋到一个文本上 #} } }) }); </script> </body> </html>
技术分享图片
from django.shortcuts import render,HttpResponse

# Create your views here.


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


def ajax_handle(request):
    return HttpResponse("黎诗")
Views.py
技术分享图片
    url(r‘^index/‘, views.index),  # index(request) 必须需传一个参数
    url(r‘^ajax_handle/‘, views.ajax_handle),  # index(request)
urls。py

关于AJAX的有参操作

技术分享图片

<!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, initial-scale=1">
    <title>Title</title>
    <script src="/static/js/jquery-3.2.1.min.js"></script>
</head>
<body>


<input type="text" id="n1">+<input type="text" id="n2">=<input type="text" id="sum">

{#为什么不需要name标签:form表单的作用,点submit的按钮,自动绑定事件,以name,ajax,是我们直接拼键值对了,我们写的是什么,他就是什么#}
<button class="count">计算</button>



<script>

    // ajax的有参请求

    //绑定点击事件
    $(".count").click(function () {
        //触发ajax请求
        $.ajax({
            url:"/count/",
{#            data-->指定你要放的参数#}
            data:{"num1":$("#n1").val(),"num2":$("#n2").val()},
        {# 这里写的都是JavaScript代码,与Python无关,不是字典,是基于js的数据类型,obj类型#}
{#        这里加键值对#}
            success:function (data) {
                console.log(data);
                $("#sum").val(data)


            }
        })
    })
</script>
</body>
</html>
技术分享图片
def count(request):
    num1 = request.GET.get("num1")
    num2 = request.GET.get("num2")
    ret = int(num1)+int(num2)
    return HttpResponse(str(ret))
逻辑处理views.py

注意点

 data里面的类型须是符合序列化字符串

校验用户注册信息

<!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, initial-scale=1">
    <title>Title</title>
    <script src="/static/js/jquery-3.2.1.min.js"></script>
</head>
<body>

{% csrf_token %}
<h4>校验用户是否存在</h4>
<input type="text" id="user"><span></span>


<script>
 

    //校验注册信息
    $("#user").blur(function () {
        $.ajax({
            url: "/jiaoyan_user/",
            type: "post",
            data: {
                "user": $("#user").val(),
                "csrfmiddlewaretoken": $("[name=‘csrfmiddlewaretoken‘]").val()},
            success: function (data) {
                console.log(data);

                var data = JSON.parse(data);
                {#                反序列化为字典#}
                if (data.is_reg) {
                    $("#user").next().html("该用户已注册").css("color","red");
                    {#                    当注册,添加错误信息,#}
                }
            }
        })
    })
</script>
</body>
</html>
技术分享图片
def jiaoyan_user(request):
    response={"is_reg":True}
    user=request.POST.get("user")
    # == 表示在数据库里有
    if user == "jassin":
        pass
    else:
        response["is_reg"] = False
    import json
    # 返回到页面,要序列化成字符串
    return HttpResponse(json.dumps(response))
Views.py
技术分享图片
  url(r‘^jiaoyan_user/‘, views.jiaoyan_user),  # index(request)
urls.py

注意点

关于csrf错误

 

Django 之Ajax

原文:https://www.cnblogs.com/jassin-du/p/8386926.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!