zoukankan      html  css  js  c++  java
  • Django之ajax

    json

    定义:json(JavaScript Object Notation, JS 对象标记),是一种轻量级的数据交换格式。

    它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

    JS类型的子集为json类型

    json类型的几种类型:

              1.数字类型 

              2.字符串类型

                   3.布尔类型

               4.数组类型

               5.对象类型

               6.null

    盗图解释一下json与js

    举例合格的json对象

    ["lan","zhou"]
    {"name":"lanbo","name":"ting"}
    [{"name":"haha","name":"hehe"}]
    举例不合格的json对象
    { name: "张三", 'age': 32 }                     // 属性名必须使用双引号
    
    [32, 64, 128, 0xFFF] // 不能使用十六进制值
    
    { "name": "张三", "age": undefined }            // 不能使用undefined
    
    { "name": "张三",
      "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
      "getName":  function() {return this.name;}    // 不能使用函数和日期对象
    } 

    stringfy与parse

    这两个是在前段里面用的

    json.parse();          用于将一个json字符串转换为javascript对象

    eg:

    console.log(JSON.parse('{"name":"lanbo"}'));     //这个是正确的

    console.log(JSON.parse('{name:"lanbo"}'));                             //错误,因为反序列化的对象一定是一个json的字符串

    console.log(JSON.parse('[12,undefined]'));                   //不能用undefined

    json.stringfy();      //用于将javascript值装换为json字符串

    console.log(JSON.stringify({'name':"lanbo"}));

    练习

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <script>
        var d={'name':"alex"};
        var data=JSON.stringify(d);
         // stringify:js中的序列化
         console.log(data);
         console.log(typeof data );
    
        var ret=JSON.parse("null");
        console.log(ret);
        console.log(typeof ret);
    
    </script>
    </body>
    </html>  
    

    ajax介绍

    ajax中文意思就是“异步Javascript和XML”,也就是用javascript语言进行异步交互,

    传输的数据为XML(传输的数据不只是XML)

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

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

    ajax特点:

        1.局部刷新

                   2.异步请求

    js实现的局部刷新

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <style>
            .error{
                color:red
            }
        </style>
    </head>
    <body>
    
    
    <form class="Form">
    
        <p>姓名  <input class="v1" type="text" name="username" mark="用户名"></p>
        <p>密码  <input class="v1" type="text" name="email" mark="邮箱"></p>
        <p><input type="submit" value="submit"></p>
    
    </form>
    
    <script src="jquery-3.1.1.js"></script>
    
    <script>
    
        $(".Form :submit").click(function(){
    
            flag=true;
    
            $("Form .v1").each(function(){
    
                var value=$(this).val();
                if (value.trim().length==0){
                     var mark=$(this).attr("mark");
                     var $span=$("<span>");
                     $span.html(mark+"不能为空!");
                     $span.prop("class","error");
                     $(this).after($span);
    
                     setTimeout(function(){
                          $span.remove();
                     },800);
    
                     flag=false;
                     return flag;
    
                }
            });
            return flag
        });
    
    
    </script>
    
    
    </body>
    </html>
    

    jquery实现的ajax 

    {% load staticfiles %}
    
    <!DOCTYPE html>
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="{% static 'JS/jquery-3.1.1.js' %}"></script>
    </head>
    <body>
    
    <button class="send_Ajax">send_Ajax</button>
    
    <script>
          //$.ajax的两种使用方式:
    
          //$.ajax(settings);
          //$.ajax(url,[settings]);
    
    
           $(".send_Ajax").click(function(){
    
               $.ajax({
                   url:"/handle_Ajax/",
                   type:"POST",
                   data:{username:"Yuan",password:123},
    
                   success:function(data){
                       alert(data)
                   },
    
                     //=================== error============
    
                    error: function (jqXHR, textStatus, err) {
    
                            // jqXHR: jQuery增强的xhr
                            // textStatus: 请求完成状态
                            // err: 底层通过throw抛出的异常对象,值与错误类型有关
                            console.log(arguments);
                        },
    
                     //=================== complete============
    
                    complete: function (jqXHR, textStatus) {
                        // jqXHR: jQuery增强的xhr
                        // textStatus: 请求完成状态 success | error
                        console.log('statusCode: %d, statusText: %s', jqXHR.status, jqXHR.statusText);
                        console.log('textStatus: %s', textStatus);
                    },
    
                    //=================== statusCode============
                    statusCode: {
                        '403': function (jqXHR, textStatus, err) {
                            console.log(arguments);  //注意:后端模拟errror方式:HttpResponse.status_code=500
                         },
    
                        '400': function () {
                        }
                    }
    
               })
    
           })
    
    </script>
    </body>
    </html>
    

      

    ajax优缺点

    优点:

    • AJAX使用Javascript技术向服务器发送异步请求;
    • AJAX无须刷新整个页面;
    • 因为服务器响应内容不再是整个页面,而是页面中的局部,所以AJAX性能高;

    整体举例

    urls中

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

      

    views中

    from django.shortcuts import render,HttpResponse,redirect
    import json
    # Create your views here.
    def index(request):
        return render(request,"index.html")
    
    def ajax_handler(request):
        return HttpResponse("安子")
    def cal(request):
        num1=request.GET.get("num1")
        num2=request.GET.get("num2")
        ret=int(num1)+int(num2)
        return HttpResponse(ret)
    
    def jiaoyan_user(request):
        response={"is_reg":True}
        user=request.POST.get("user")
        if user == "yuan":
          pass
        else:
            response["is_reg"]=False
    
        return HttpResponse(json.dumps(response))
    

     html中 

    #index.html


    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>index</h3> <button class="s1">send_ajax</button> <p class="name"></p> <hr> <input type="text" id="n1">+<input type="text" id="n2">=<input type="text" id="he"><button class="cal">计算</button> <hr > {% csrf_token %} <h4>校验用户名</h4> <input type="text" id="user"><span></span> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script> <script> $(function () { //ajax的无参请求 $(".s1").click(function () { //触发ajax事件 $.ajax({ url:"/ajax_handler/", type:"get", success: function (data) { console.log(data); $(".name").html(data) } }) }) }); $(".cal").click(function () { $.ajax({ url:"/cal/", data:{"num1":$("#n1").val(),"num2":$("#n2").val()}, success:function (data){ console.log(data); $("#he").val(data) } }) }); $("#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>

     ajax实现登录

    需求:运行出现login界面,然后输入用户名和密码,去数据库查询,有的话就跳转到首页,错误就在后面报错

    ps:数据库自己建(models中,记得配置mysqldb)

    实现:注意在这里我出现的错误就是没有注册app01,但是有些创建方式是不需要,截图提示

    urls中

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

    views 

    from django.shortcuts import render, HttpResponse, redirect
    from app01 import models
    # Create your views here.
    import json
    
    
    def login(request):
        if request.method=="POST":
            response = {"flag": True}
            user = request.POST.get("user")
            pwd = request.POST.get("pwd")
            user_obj = models.User.objects.filter(user=user, pwd=pwd)
            print(user_obj)
            if user_obj:
                pass
            else:
                response["flag"] = False
            return HttpResponse(json.dumps(response))
        return render(request, "login.html")
    
    
    def index(request):
        return render(request, "index.html")
    

    html中  

    index.html
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>欢迎来到首页</h1>
    </body>
    </html>
    
    
    
    
    login.html
    
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {% csrf_token %}
    <input type="text" name="user" class="ming">
    <input type="password" name="pwd" class="mi">
    <input type="submit" value="提交" id="anniu"><span id="n1">
        <script src="/static/jquery-3.2.1.min.js"></script>
    <script>
        $("#anniu").click(function(){
            $.ajax({
                url:"/login/",
                type:"post",
                data:{
                    "user":$(".ming").val(),
                    "pwd":$(".mi").val(),
                     "csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val()},
    
                 success: function (data) {
                     console.log(data);
                     var data=JSON.parse(data);
                     if(data.flag){
                      location.href="/index/"
                     }else{
                         $("#n1").html("用户名或密码错误").css("color","red")
                     }
    
                 }
            })
        })
    </script>
    
    </body>
    </html>
    

      

    粗略笔记,有待更新 

  • 相关阅读:
    Mybatis用到的设计模式和常用类原理
    svn 版本迁移到 git 仓库
    mysql 主从master-slave同步复制 配置,为读写分离准备
    java.lang.NoSuchFieldError 异常原因
    PropertiesFactoryBean PropertyPlaceholderConfigurer 区别
    关于BigDecimal 和 double 类型保存金钱,以及精度问题,银行家舍入法
    mysql遇到锁表常用命令
    代码质量管理工具 sonar 配置
    java 环境变量java_home配置多加了 导致zookeeper莫名其妙问题。
    svn 版本转为git
  • 原文地址:https://www.cnblogs.com/1996-11-01-614lb/p/8387700.html
Copyright © 2011-2022 走看看