前言:JSON使用JS语法来描述数据对象,JSON独立于语言和平台
json的js语法,json.stringfy()把其他数据格式转换为json字符串,json.parse()把json格式字符串转换为原来数据格式。AJAX
合格的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;} // 不能使用函数和日期对象
}
AJAX:翻译成中文就是异步的js和XML,它不是新的编程语言,是一种使用现有标准的新方法
最大优点就是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分,用户感受不到请求和相应,
同步交互:一个请求有一个响应后再发第二个请求
异步交互:不需要响应,就可以直接发请求
常用格式:
$('#b1').on("click",function(){
$.ajax({
url:"/ajax_add/",
type:'GET' , 提交方式
data:{"i1" : $("#i1").val() , 'i2' : $(‘#i2’).val() }, 要发送给后台的数据
success: function(data) { 成功得到响应时从后台得到的数据
$('#i3').val(data);
}
})
})
后台回复:
return JsonResponese(ret)
常见的应用场景就是搜索引擎根据用户输入的关键字,自动给予提示
还有就是注册时的查重
AJAX的优缺点:
1.异步发送请求
2 无须刷新整个页面
3 刷新部分内容,性能高
缺点;后台压力大,请求可能太多
data 参数中的键值对,如果值不是字符串,需要转换成json格式字符串
AJAX请求设置csrf_token
方式一:
通过隐藏的input标签中的值,放在data中发送。
"csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val()
方式二:
通过获取返回的cookie中的字符串,放置在请求头中发送
方式三:
可以使用$.ajaxSetup()方法为ajax请求统一设置。
AJAX上传文件
$("#b1").click(function () {
// 先生成一个表单对象
var formData = new FormData();
// 向form表单对象添加键值对数据
formData.append("f1", $("#i1")[0].files[0]);
formData.append("name", "张曌");
$.ajax({
url: "/upload/",
type: "POST",
processData: false, // 告诉jQuery不要去处理发送的数据
contentType: false, // 告诉jQuery不要去设置Content-Type请求头
data: formData,
success:function (data) {
console.log(data)
}
})
});
django 内置的序列化 serializers:
def books_json(request):
book_list=models.Book.objects.all()[0:10]
from django.core import serializers
ret=serializers.serialize('json',book_list)
return HttpResponse(ret)