一: Json
2.1 何谓Json
JSON(Javascript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率
JSON 格式于2001年由 Douglas Crockford 提出,目的就是取代繁琐笨重的 XML 格式。
JSON 格式有两个显著的优点:书写简单,一目了然;符合 Javascript 原生语法,可以由解释引擎直接处理,不用另外添加解析代码。所以,JSON迅速被接受,已经成为各大网站交换数据的标准格式,并被写入ECMAScript 5,成为标准的一部分。
#在线json格式解析 Bejson http://www.bejson.com/
2.2 Json和Python数据对比
Python | Json |
dict | object |
list,tuple | array |
str | string |
int,fload | number |
True | true |
Flase | false |
None | null |
2.3 合格的JSON应该具备哪些条件
- 属性必须使用双引号括起来
- 不能使用undefined或者函数或者日期对象
- 只要是合规的JSON都可以用相应语言进行反序列操作
2.4 在JS中序列化和反序列化
2.4.1 序列化方法 JSON.stringify()
结果如下
2.4.2 反序列方法 JSON.parse()
结果如下
二: ajax
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。
具有如下特性
- 异步
- 局部刷新
语法
我们通过一个登陆例子解释
# 前端页面
<body> {% csrf_token %} 用户名:<input id="user" type="text"><br> 密码: <input id="pwd" type="password"><br> <input type="button" id="loginBtn" value="登陆"><span id="login_error">span> <script> // 绑定事件 $(\'#loginBtn\').click(function () { $.ajax({ // 往服务器传参 url: \'/login/\', type: \'post\', data: { user: $(\'#user\').val(), pwd: $(\'#pwd\').val(), csrfmiddlewaretoken: $("[name = \'csrfmiddlewaretoken\']").val() }, success:function (response) { // 反序列化服务端返回的数据 var response_obj = JSON.parse(response); console.log(response_obj); if(response_obj.user){ // 登陆成功 location.href=\'http://www.baidu.com\'; }else{ // 登陆失败 $(\'#login_error\').html(response_obj.message) } } }) }) script> body>
# 后端处理
def login(request): response = {\'user\': None,\'message\':None} if request.method == \'POST\': user = request.POST.get(\'user\') pwd = request.POST.get(\'pwd\') db_search_ret = Userinfo.objects.filter(name=user,password=pwd).first() if db_search_ret: response[\'user\'] = user else: response[\'message\'] = \'用户名或者密码错误\' return HttpResponse(json.dumps(response)) else: return render(request,\'login.html\')
范例1:
{% csrf_token %} + =
范例2: 获取csrfToken的第二种方法
# 单独放一个文件,在ajax之前导入即可
function getCOOKIE(name) { var COOKIEValue = null; if (document.COOKIE && document.COOKIE !== \'\') { var COOKIEs = document.COOKIE.split(\';\'); for (var i = 0; i
范例2: 发送的数据不能有二次结构,如列表,需要使用JSON.stringify格式化。
$.ajax({ url: \'/fm/test/\', type: \'Post\', data: { \'name\': \'小黑\',\'sb\': JSON.stringify([[1,32,3],[4,5,6]]) },