jquery对 ajax 的支持

2 篇文章 0 订阅

jquery对 ajax 的支持

1.$obj.load()

​ 作用:载入远程的HTML文件到指定的元素中

$obj.load(url,data,callback)
	$obj:显示响应内容的jq元素
	url:请求地址
	data:请求参数(可省略)
		方式1:字符串传参
		"key1=value1&key2=value2"
		注:此种传参会使用 get 方式发送请求
		方式2:使用JS对象传参
		{
   		 key1:"value1",
         key2:"value2"
		}
		注:此种传参会使用 post 方式发送请求
	   callback:响应成功后的回调函数(可省略)

eg.
<script>
    $(function () {
        $('#btn').click(function () {
            //load
            //$('#show').load('/index/test_load_server');

            //参数 -GET形式
            //$('#show').load('/index/test_load_server','name=li&age=18')

            //参数 -POST形式
            //$('#show').load('/index/test_load_server',{name:'haha',age:18,})

            //回调
            //$('#show').load('/index/test_load_server',function () {
            //    alert('---This is callback---')
            //})

            //指定元素load -- 将元素写在url中
            $('#show').load('/index/test_load_server #btn2')
        })
    })

</script>

2.$.get() 和 $.post()

​ 作用:通过get方式异步的向远程地址发送请求

$.get(url,data,callback,type)
		url:请求地址
		data:传递到服务器端的参数
		可以是字符串 :"name=sf.zh&age=18"
		也可以是js对象:
			{
				name:"sf.zh",
				age:18
			}
		callback:响应成功后的回调函数
        ex: function(data){
           console.log(data)
        }
		type:响应回来的数据的格式
			取值如下:
			1.html : 响应回来 的文本是html文本
			2.text : 响应回来的文本是text文本
			3.script : 响应回来的文本是js执行脚本
			4.json : 响应回来的文本是json格式的文本
            
$.post  -> 请求头中的Content-Type:application/x-www-form-urlencoded; charset=UTF-8  
即为表单post提交。 后台django可通过request.POST获取数据 

考虑 csrf_token ->  请求参数里 拼上
csrfmiddlewaretoken

{% csrf_token %}
csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val()
3. $.ajax()
参数对象中的属性:
	1.url : 字符串,表示异步请求的地址
	2.type : 字符串,请求方式,get 或 post
	3.data : 传递到服务器端的参数
		可以是字符串 :"name=sf.zh&age=18"
		也可以是js对象:
			{
				name:"sf.zh",
				age:18
			}
	4.dataType : 字符串,响应回来的数据的格式
		1.'html'
		2.'xml'
		3.'text' 
		4.'script'
		5.'json'
		6.'jsonp' : 有关跨域的响应格式
	5.success:回调函数,请求和响应成功时回来执行的操作
	6.error : 回调函数,请求或响应失败时回来执行的操作
	7.beforeSend : 回调函数,发送ajax请求之前执行的操作,如果return false,则终止请求
    	使用场景:
        	1,发请求之前可将提交摁钮置成不可点击状态,防止用户重复提交
            2,摁钮点击后,loading画面
    		3,所有数据相关的校验
    
    8.async  是否启用异步请求,默认为true【异步】
    

<script>
    $(function () {
        $('#btn').click(function () {
            $.ajax({
                //向 url 发送请求
                url:'/index/test_jq_ajax_server',

                //type - 此次请求的方式
                type:'get',

                // dataType-服务器返回的类型
                dataType:'json',

                // 是否异步
                async:true,

                //响应成功的回调函数
                success:function (data) {
                    console.log(data.name)
                    // 发送成功之后 将btn置为可用
                    $('#btn').removeAttr('disabled')
                    // 隐藏加载动画
                    $('#loading').hide(3000);
                },

                //响应失败的回调函数
                error:function () {
                    alert('Server is busy!')
                },

                beforeSend:function () {
                    // 将btn 置成不可用状态,避免重复提交
                    $('#btn').attr({disabled:'disables'})
                    // 加载loading 动画
                    $('#loading').show();
                },
            })
        })
    })
</script>

跨域

1,什么是跨域

​ 跨域:非同源的网页,相互发送请求的过程,就是跨域

浏览器的同源策略:
同源:多个地址中,相同协议,相同域名,相同端口被视为是"同源"
在HTTP中,必须是同源地址才能互相发送请求,非同源拒绝请求(<script>和<img>除外)。

http://www.tedu.cn/a.html
http://www.tedu.cn/b.html
以上地址是 "同源"

http://www.tedu.cn/a.html
https://www.tedu.cn/b.html
由于 协议不同 ,所以不是"同源"

http://localhost/a.html
http://127.0.0.1/a.html
由于 域名不同 ,所以不是"同源"

http://www.tedu.cn:80/a.html
http://www.tedu.cn:8080/b.html
由于端口不同 , 所以不是"同源"
2,解决方案

通过 script标签 src 向服务器资源发送请求
由服务器资源指定前端页面的哪个方法来执行响应的数据

'''''''''''''''''''''js 原生跨域''''''''''''''''''''''''''''

------views.py---------
def cross(request):

    return render(request,'index/cross.html')

def cross_server(request):

    func=request.GET.get('callback')

    return HttpResponse(func+"('跨域成功')")

--------html-------------
<script>
    // 预留函数
    function print(data) {
        console.log(data)
    }

    // js 原生跨域
    $(function () {
        $('#btn').click(function () {

            // 获取body
            var body=document.getElementsByTagName('body')[0];
            // 创建script
            var script=document.createElement('script');
            script.type='text/javascript';
            script.src='http://localhost:8000/index/cross_server?callback=print';
            // 将script 添加到body里
            body.append(script);
        })
    })
</script>

3, jquery 的跨域

jsonp - json with padding
用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据

只支持get请求

ex:
​ 当前地址: http://127.0.0.1:8000/index
​ 欲访问地址: http://localhost:8000/data?callback=xxx

$.ajax({
	url:'xxx',
	type:'get',
	dataType:'jsonp',//指定为跨域访问
	jsonp:'callback',//定义了callback的参数名,以便获取callback传递过去的函数名   
	jsonpCallback:'xxx' //定义jsonp的回调函数名
});


//超简版本
$.ajax({
	url:'xxx',
	type:'get',
	dataType:'jsonp',//指定为跨域访问
	success: function(data){
        console.log(data);       
    }
});


def cross_server(request):
    func=request.GET.get('callback')
    d={
        'name':'xiao',
        'age':18,
    }
    import json
    return HttpResponse(func+'('+ json.dumps(d)+')')

// jquery 跨域
$(function () {

    $('#btn').click(function () {
        //ajax版本
        $.ajax({

            url:'http://localhost:5000/index/cross_server',
            type:'get',
            dataType:'jsonp',
            jsonp:'callback',
            jsonpCallback:'print',
        })
        //ajax 超简版
        $.ajax({
            url:'http://localhost:5000/index/cross_server',
            type:'get',
            dataType:'jsonp',
            success:function (data) {
                console.log('----ajax-console---')
                console.log(data)
            }
        })
    })

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值