2017-11-14

Django--Ajax
  • Json
    什么是json,JSON(JavaScript Object Notation,js对象标记)是一种轻量级的数据交换的格式,它基于ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简介和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效的提高网络的传输效率。
  •     json对象,js对象

    常见的json对象。
#以下的json对象为合格的json对象
["one", "two", "three"]

{ "one": 1, "two": 2, "three": 3 }

{"names": ["张三", "李四"] }

[ { "name": "张三"}, {"name": "李四"} ] 

#以下的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;}   #不能使用函数和日期对象
}  
  • 数据交换的格式
    JSON只是js的自己
    json之人双引号
    json一定是一个字符串
  • stringify与parse方法
JSON.parse # 将一个json字符串转换为JavaScript 相当于Python里的json方法的loads方法。
console.log(JSON.parse('{"name":"Hello"}')

JSON。stringify():# 用于将JavaScript值转化为Json字符串,相当于Python中json的dumps方法。
console.log(JSON.stringify({'name':'Hello'})

  • 前端与后台传输数据的方法
    GET:    
        通过地址栏传输数据
        通过a标签传输
        通过form表单
    POST:
        通过form表单
  • json和xml做数据比对

#JSON格式有俩个显著的有点:书写简单,一目了然;符合了JavaScript原生复发,可以由解释引擎直接处理,不用应哇天津爱解析代码。所以,json迅速被接受,已经成为各大网站交换数据的标准格式。
#XML和JSON都使用结构化方法来标记数据。

#XML和JSON比较
#XML表示中国不封省市的数据
<?xml version="1.0" encoding="utf-8"?>
<country>
    <name>中国</name>
    <province>
        <name>黑龙江</name>
        <cities>
            <city>哈尔滨</city>
            <city>大庆</city>
        </cities>
    </province>
    <province>
        <name>广东</name>
        <cities>
            <city>广州</city>
            <city>深圳</city>
            <city>珠海</city>
        </cities>
    </province>
    <province>
        <name>台湾</name>
        <cities>
            <city>台北</city>
            <city>高雄</city>
        </cities>
    </province>
    <province>
        <name>新疆</name>
        <cities>
            <city>乌鲁木齐</city>
        </cities>
    </province>
</country>

#用JSON表示中国部分省市
{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}



#可以看到,JSON的见得语法格式和清晰的层次结构要比XML容易阅读,并且在数据交换方面,由于JSON所使用的字符要比XML少的多,可以大大的节约传输数据所占用的宽带。
#注意:JSON格式取代了xml给网络传输带来了很大的便利,但是却没有了xml的一目了然,尤其是json数据很长的时候,我们会陷入繁琐复杂的数据节点查找中
AJAX简介
#AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

# *同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
# *异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
#AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)
  • AJAX常见的应用场景
当输入用户名后,把光标移动到其他表单项上时,浏览器会使用AJAX技术向服务器发出请求,服务器会查询名为zhangSan的用户是否存在,最终服务器返回true表示名为lemontree7777777的用户已经存在了,浏览器在得到结果后显示“用户名已被注册!”。

整个过程中页面没有刷新,只是局部刷新了;
在请求发出后,浏览器不用等待服务器响应结果就可以进行其他操作;

  • ajax的优缺点
#优点
AJAX使用Javascript技术向服务器发送异步请求;

AJAX无须刷新整个页面;

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

  • ajax的参数
url:要求为string类型的参数,(默认为当前页面地址)发送请求的地址。
type:要求为string类型的参数,请求方式为POST或者为GET请求,默认是GET请求
data:要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。
success:要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。(1)由服务器返回,并根据dataType参数进行处理后的数据。(2)描述状态的字符串。function(data, textStatus){//data可能是xmlDoc、jsonObj、html、text等等this;  //调用本次ajax请求时传递的options参数error:要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。
实例一:
前端代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
<input type="text" class="first"><span>+</span>
<input type="text" class="second"><span>=</span>
<input type="text" class="result" value="">
<button class="btn-info btn count">计算</button>
<span class="hint"></span>

<script src="/static/jquery-3.2.1.min.js"></script>
<script>
    $(".count").click(function () {
       $.ajax({
        url:"/count_home/",
        type:"GET",
         data:JSON.stringify({
            first_num:$(".first").val(),
            second_num:$(".second").val()
           }),
           contenType:"application/json",
           success:function (data) {
               $(".result").val(data),
               $(".hint").html("计算完成")
           }
           }
       )
    })
</script>
</body>
</html>
#后台代码

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


def count_home(request):

    print(request.GET,'******')
    for item in request.GET:
        first_num = eval(item).get('first_num')
        second_num = eval(item).get('second_num')
        data = int(first_num)+int(second_num)
        return HttpResponse(data)

    
    
















posted @ 2017-11-14 11:51  你好丶  阅读(144)  评论(0编辑  收藏  举报