专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 ajax实现的详解

ajax实现的详解

更新时间:2021-07-01 16:44:02 来源:星辉 浏览741次

1.知识储备

(1)json

由于使用Ajax发送的大多是json数据,所以我们需要先了解一下json是什么。首先json指的是一种轻量级的数据交换格式,它所支持的数据类型是JavaScript数据类型的一个子集,它支持数字,字符串,布尔值,类列表,类字典,null,json数据只支持双引号,json字符串由单引号包裹。

(2)JavaScript的序列化与反序列化

序列化:JSON.stringify()

反序列化:JSON.parse()

2.jQuery实现Ajax

语法:$.ajax()

参数:

请求参数:url                  #当前请求的地址
type                 #当前请求的方式
data                 #当前请求要发送的数据
processData          #是否对data中的数据做编码处理
contentType          #当前请求发送的数据类型traditional          #当data中有数组是使用,为true时直接将数组发送到服务端,为false时进行深层次迭代响应参数:dataType             #预期服务端返回的数据类型,可用的值有:html|xml|json|text|script

3.Ajax发POST请求携带Django的CSRFTOKEN的方法

1、通过Django模板语言获取csrftoken,并设置相应键值对
$.ajaxSetup({
    data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});



2、通过jQuery.cookie获取csrftoken并设置到请求头中
<script src="jquery.cookie.js路径' %}"></script>
$.ajax({
 
headers:{"X-CSRFToken":$.cookie('csrftoken')},
 
})


3、获取csrftoken标签生成的input标签的value值,并设置相应键值对
{% csrf_token %}
$.ajax({
data:{csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),
 })

4.jQueryd的serialize()方法

#serialize()方法用于自动获取需要提交的表单数据并序列化
1、直接找到表单对象,对所有数据序列化
$('form').serialize()

2、对指定的表单数据进行序列化
$(':text,select').serialize()

5.Ajax通过FormData发送文件

#FormDta可以发送任意类型的数据
var formdata=new FormData();   #创建FormData对象

formdata.append("upload_file",$()[0].files[])  #向FormData对象中添加键值对,document对象的files方法获取文件对象列表,第一个对象就是当前准备上传的文件

$.ajax({data:formdata,contentType:false,processData:false})  #添加到data中发送

6.JavaScript实现Ajax

(1)创建XMLHttpRequest对象

function createXMLHttpRequest() {
        var xmlHttp;
        // 适用于大多数浏览器,以及IE7和IE更高版本
        try{
            xmlHttp = new XMLHttpRequest();
        } catch (e) {
            // 适用于IE6
            try {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                // 适用于IE5.5,以及IE更早版本
                try{
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){}
            }
        }            
        return xmlHttp;
    }

(2)创建与服务器的连接

var xmlHttp = createXMLHttpRequest();
xmlHttp.open("GET", "/ajax_get/?a=1", true);  #第一个参数为请求方式,第二个参数为请求的服务器地址,第三个参数表示是否异步请求,默认不传值为true

(3)发送请求

1、get请求
xmlHttp.send(null);  #get请求没有请求体数据,但是需要发送null,否则会引起火狐浏览器无法正常发送


2、post请求
xmlHttp.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);  #设置请求头,form表单会默认这个键值对不设定,Web服务器会忽略请求体的内容。
xmlHttp.send(“username=yuan&password=123”) #设置请求体数据

(4)接收服务器响应

XMLHttpRequest对象有一个onreadystatechange事件,它会在XMLHttpRequest对象的状态发生变化时被调用,而XMLHttpRequest对象一共有5种状态分别是0:初始化未完成状态,只是创建了XMLHttpRequest对象,还未调用open()方法;1:请求已开始,open()方法已调用,但还没调用send()方法;2:请求发送完成状态,send()方法已调用;3:开始读取服务器响应;4:读取服务器响应结束。onreadystatechange事件只会在除0以外的状态下触发。 

#状态码和响应内容只有在状态4才能获取到xmlHttp.onreadystatechange = function() {
            if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                alert(xmlHttp.responseText);    
            }
        };

7.同源策略的概念

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当一个浏览器的两个tab页中分别打开来百度和谷歌的页面当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,只有和百度同源的脚本才会被执行。如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问,该异常原因是浏览器拦截了非同源站点的返回结果。

8.JSONP的概念与实现

jsonp是实现跨域请求的一种方法,利用的是script标签的src属性具有无视同源策略的特性,将需要访问的非同源地址放在script标签的src属性中进行访问,非同源站点的视图函数则响应一个指定回调函数的字符串,并将json数据作为回调函数的参数一起返回给请求方。

jsonp的JavaScript实现

#请求方页面<button onclick="f()">sendAjax</button>

<script>    #创建script标签
    function addScriptTag(src){
         var script = document.createElement('script');
         script.setAttribute("type","text/javascript");
         script.src = src;
         document.body.appendChild(script);
         document.body.removeChild(script);
    }


    function func(name){
        alert("hello"+name)
    }
    #将需要调用的回调函数通过url传参的方式传递给响应方视图函数
    function f(){
         addScriptTag("http://127.0.0.1:7766/SendAjax/?callbacks=func")
    }
</script>


#响应方视图函数
def SendAjax(request):
 
    import json
 
    dic={"k1":"v1"}
 
    print("callbacks:",request.GET.get("callbacks"))
    callbacks=request.GET.get("callbacks")
 
    return HttpResponse("%s('%s')"%(callbacks,json.dumps(dic)))

jQuery实现

1、getJSON方法实现
#url的后面必须添加一个callback参数,callback后面的那个问号是内部自动生成的一个回调函数名
<button onclick="f()">sendAjax</button>

<script>

    function f(){
          $.getJSON("http://127.0.0.1:7766/SendAjax/?callbacks=?",function(arg){
            alert("hello"+arg)
        });
    }
    
</script>

2、Ajax实现
 #用自定义回调函数处理响应,jsonp定义回调函数的键,jsonpCallback定义回调函数的值即回调函数函数名
<script>

    function f(){
          $.ajax({
                url:"http://127.0.0.1:7766/SendAjax/",
                dataType:"jsonp",
                jsonp: 'callbacks',           
                jsonpCallback:"SayHi"
           });

       }

    function SayHi(arg){
                alert(arg);
            }

</script>



<script>
    #用Ajax的success回调函数处理响应

    function f(){

            $.ajax({
               url:"http://127.0.0.1:7766/SendAjax/",
               dataType:"jsonp",            //必须有,告诉server,这次访问要的是一个jsonp的结果。
               jsonp: 'callbacks',          //jQuery帮助随机生成的:callbacks="wner"
               success:function(data){
                   alert("hi "+data)
              }
         });

       }

</script>

以上就是星辉小编介绍的"ajax实现的详解",希望对大家有帮助,想了解更多可查看AJAX教程,如有疑问,请在线咨询,有专业老师随时为您服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>