json和ajax技术

什么是json
json指的是javaScript对象表示法
json是轻量级的文本数据交换格式
json 独立于语言
json具有自我描述性,,更易理解
json使用jsvaScript语法描述数据对象,但是jsjon仍然独立于语言和平台,json解析器和json库支持许多不同的编程语言
使用js的时候:转化为json : JSON.stringify()
转回字符串:JSON.parse()
使用python 的:
转化为json : json.dumps
转回字符串:josn.loads
合格的json对象:
["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["张三", "李四"] }
[ { "name": "张三"}, {"name": "李四"} ] 
json为替代XML 的格式
ajax:(Asynchronous Javascript And XML)异步的javascript和XML
是一种异步与服务器交互的一种技术
优势:
1,异步:发一个请求不用等待响应,可以继续发下一个请求
2,偷偷的发请求,用户感受不到,不用刷新
3,数据量小,只需要想要的内容,不需要整个页面
缺点:
滥用技术,造成服务器压力
参数:
$.ajax({
url:'/calc/'  请求的网址
type:'post',   请求的方式
data:{
'i1':i1,
'i2':i2
},
success.function(res){  成功之后做什么
console.log(res);  res 拿到的响应
$('#i3').val(res)
}
})
 
AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
  • 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
  • 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
<body>
<h1>计算</h1>
<input type="text" id="i1">
<input type="text" id="i2">
<input type="text" id="i3">
<button type="submit" id="d1">提交</button>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script>
    $('#d1').click(function () {
        var i1 = $('#i1').val();  注意加上val取值
        var i2 = $('#i2').val();
        $.ajax({
            url:'/sale/',
            type:'post',
            data:{
                'i1':i1,
                'i2':i2,
            },
            success:function (res) {
                $('#i3').val(res)     得到值 
            }
        })
    })
</script>
 
在函数中return要使用HttpResponse对象
 
ajax设置csrf_token
1,通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送。
"csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val()使用jq获取
$.ajax({
  url: "/cookie_ajax/",
  type: "POST",
  data: {
    "username": "Q1mi",
    "password": 123456,
    "csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val()  // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中
  },
  success: function (data) {
    console.log(data);
  }
})
 
2,放置到请求头中:
headers: {"X-CSRFToken": $.cookie('csrftoken')},
 
$.ajax({
  url: "/cookie_ajax/",
  type: "POST",
  headers: {"X-CSRFToken": $.cookie('csrftoken')},  // 从Cookie取csrftoken,并设置到请求头中
  data: {"username": "Q1mi", "password": 123456},
  success: function (data) {
    console.log(data);
  }
})
 
3,给全局添加:
建立一个js文件:
加入:
1,自己写的GetCookie方法:
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');
2,使用$ajaxSteup()方法为ajax请求同一的设置
function csrfSafeMethod(method) {
  // these HTTP methods do not require CSRF protection
  return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
 
$.ajaxSetup({
  beforeSend: function (xhr, settings) {
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
      xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
  }
});
 
如果使用从cookie中取csrftoken的方式,需要确保cookie存在csrftoken值。
如果你的视图渲染的HTML文件中没有包含 {% csrf_token %},Django可能不会设置CSRFtoken的cookie。
这个时候需要使用ensure_csrf_cookie()装饰器强制设置Cookie。
django.views.decorators.csrf import ensure_csrf_cookie
@ensure_csrf_cookie
def login(request):
    pass

猜你喜欢

转载自www.cnblogs.com/lnrick/p/9692951.html