Ajax学习笔记

Ajax学习笔记

前端与后端交互一般有两种方式,一种是URL和表单形式提交发送请求,第二种就是这里要提到的Ajax

URL和表单形式提交发送请求

  • GET
  • POST
    特点:需要页面刷新,才能得到请求内容

Ajax方式

用jQuery实现

代码模板

$,ajax({
	url:'target/url', //向这个URL发送请求
	data: data, //需要发送的数据
	type:'POST',//或者是GET,请求方式
	dataType:'json',//指定服务器响应的数据类型 JSON、XML、HTML
    processData : false, // 告诉 jQuery 不要处理发送的数据,或者'application/json'
    contentType : false, // 告诉 jQuery 不要设置 Content-Type 请求头
    // 在发送请求之前执行的回调函数
    beforeSend: function(xhr) {
     	....
	},
	success: function (data) { // 请求成功后的回调函数,data是返回的数据
		....
	},
    error: function(xhr, status, error) { // 请求失败后的回调函数
        console.error('请求失败', error);
     }
});

GET方式

适用场景
获取数据或资源。
不修改服务器状态的请求。

$.ajax({
    url: '/api/data',  // 请求的 URL
    type: 'GET',       // 请求类型
    data: {
        'param1': 'value1',
        'param2': 'value2'
    },
    success: function(data) {
        console.log(data);
    }
});

POST方式

前后端传输数据的编码格式主要有三种

urlencoded
formdata
json
Ajax提交urlencoded格式数据

Ajax给后台发送数据的默认编码格式是urlencoded,比如username=abcde&password=123456的形式。Django后端拿到符合urlencoded编码格式的数据都会自动帮你解析分装到request.POST中,与form表单提交的数据相同。

$("#btnSubmit").click(function () {
    $.ajax({
        url: '/login/', //也可以反向解析{% url 'login' %}
        type: 'post',
        data: {
            'username': $("#id_username").val(),
            'password': $('#id_password').val()
        },
        // 上面data为提交数据,下面data形参指代的就是异步提交的返回结果data
        success: function (data){
            
        }
    })}// .serialize() 方法可将<input>, <textarea> 以及 <select>表单序列化,用于将表单中的数据序列化为 URL 编码的字符串格式
// 成urlencoded格式数据
                      
$("#btnSubmit").click(function () {
    let data = $("#loginForm").serialize();
    $.ajax({
        url: "/login/", //别忘了加斜杠
        type: $("#loginForm").attr('method'),
        data: data,
        // 下面data形参指代的就是异步提交的返回结果data
        success: function (data) {
         
        }
    });
}); 
Ajax通过FormData上传(文件)

Ajax上传文件需要借助于js内置对象FormData,另外上传文件时表单千万别忘了加enctype="multipart/form-data"属性。

//案例1,点击submi上传文件
$("#submitFile").click(function () {
    let formData = new FormData($("#upload-form"));
    $.ajax({
       url:"/upload/",//也可以写{% url 'upload' %}
       type:"post",
       data:formData,
       //这两个要必须写
       processData:false,  //不预处理数据  因为FormData 已经做了
       contentType:false,  //不指定编码了 因为FormData 已经做了
       success:function(data){
             console.log(data);
       }
    });
});
                       
//案例2,同时上传文件并提交其它数据
$("#submitFile").click(function () {
    //js取到文件,一定要加0
    let myfile = $("#id_file").files[0];
    //生成一个FormData对象
    let formdata = new FormData();
    //加其它值
    formdata.append('name', $("#id_name").val());
    //加文件
    formdata.append('myfile', myfile);
    $.ajax({
        url: '/upload/', //url别忘了加/杠
        type: 'post',
        //这两个要必须写
        processData:false,  //不预处理数据  因为FormData 已经做了
        contentType:false,  //不指定编码了 因为FormData 已经做了
        data: formdata,
        success: function (data) {
            console.log(data);
        }
    });
}); 
Ajax提交Json格式数据

前后端传输数据的时候一定要确保声明的编码格式跟数据真正的格式是一致的。如果你通过Ajax发送Json格式数据给Django后端,请一定注意以下三点:

  1. contentType参数指定成application/json;

  2. 数据是真正的json格式数据;

  3. Django后端不会帮你处理json格式数据需要你自己去request.body获取并处理。

$("#submitBtn").click(function () {
    var data_obj={'name':'abcdef','password':123456};//Javascript对象
    $.ajax({
        url:'',
        type:'post',
        contentType:'application/json',  //一定要指定格式 contentType
        data:JSON.stringify(data_obj),    //转换成json字符串格式
        success:function (data) {
            console.log(data)
        }
    });
});

Ajax发送POST请求与CSRF认证

Django 不对该视图进行 CSRF(跨站请求伪造)保护

使用 csrf_exempt 装饰器来装饰视图函数,告诉 Django 不对该视图进行 CSRF 验证,允许来自任何源的请求访问该视图,但请谨慎使用,因为这会增加安全风险。

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def UserCreateView(request) :
    form = UserModelForm2(data=request.POST)
    if form.is_valid() :
        form.save()
        return JsonResponse({"status": True})
    return JsonResponse({"status":False, "error":form.errors})

在 AJAX 请求中携带 CSRF 令牌以通过 Django 的 CSRF 验证

// 第一种方式直接在发送数据中加入csrfmiddlewaretoken
$("#btn").on("click",function () {
    $.ajax({
        url:"/some_url/",
        type:"POST",
        data:{
            //写在模板中,才会被渲染
            'csrfmiddlewaretoken': {{ csrf_token }}, 
            //其它数据
            'username': $("#id_username").val(),
            'password': $('#id_password').val()       
        },
        success:function (data) {
    }
});
});
 
//通过jquery选择器获取csrfmiddlewaretoken
$("#btn").on("click",function () {
    $.ajax({
        url:"/some_url/",
        type:"POST",
        data:{
            'csrfmiddlewaretoken':$('[name="csrfmiddlewaretoken"]').val(),
            'username': $("#id_username").val(),
            'password': $('#id_password').val()       
        },
        success:function (data) {
            
        }
    });
});
 
//使用jquery.cookie.js调用请求头cookie中的csrftoken
<script src="/static/jquery.cookie.js"> 
<script>
     $("#btn").on("click",function () {
     $.ajax({
        url:"/some_url/",
        type:"POST",
        headers:{"X-CSRFToken":$.cookie('csrftoken')},
        data:$("#form1").serialize()
    });
   })
</script>

参考

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于学习Ajax,我可以为您提供一些学习笔记。以下是一份简要的Ajax学习笔记,希望对您有所帮助: 1. 什么是Ajax? - Ajax全称为Asynchronous JavaScript and XML(异步JavaScript和XML),是一种用于创建交互式Web应用程序的技术。 - 它通过在后台与服务器进行数据交换,实现在不刷新整个页面的情况下更新部分页面内容。 2. Ajax的优点: - 异步处理:可以在后台发送和接收数据,而无需刷新整个页面。 - 提高用户体验:通过部分更新页面内容,可以提供更快的响应时间和更流畅的用户体验。 - 减轻服务器负担:只更新需要的部分内容,减少了不必要的数据传输和服务器负载。 3. Ajax的基本原理: - 使用XMLHttpRequest对象向服务器发送请求,并接收响应。 - 通过JavaScript在前端处理响应数据。 - 更新页面内容,以显示最新的数据。 4. Ajax的核心技术: - XMLHttpRequest对象:用于与服务器进行数据交换。 - JavaScript:用于处理响应数据和更新页面内容。 - XML或JSON:用于传输数据格式。 5. Ajax的使用步骤: - 创建XMLHttpRequest对象。 - 定义请求类型、URL和是否异步。 - 发送请求并接收响应。 - 处理响应数据并更新页面内容。 6. 常见的Ajax框架和库: - jQuery:一个流行的JavaScript库,提供了简化Ajax开发的方法和函数。 - Axios:一个基于Promise的HTTP客户端,用于浏览器和Node.js。 - Fetch API:一种用于发送和接收网络请求的新标准。 这只是Ajax学习的一些基本概念和步骤,您可以进一步深入学习Ajax的相关知识和实践。希望这些笔记对您有所帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值