ajax基本用法介紹


一、基於jQuery的ajax

此時需要在模板中引用jQuery,ajax的本質是利用瀏覽器自帶的XMLHttpRequest對象並通過jQuery將數據和請求頭進行封裝再發送。ajax基本使用方法如下:

$.ajax({
        url:'url',
        type:'POST',
        data:{'k1':v1,'k2':v2,},
        dataType:'JSON',
        traditional:true,
        success:function (arg) {
        }
        error:function () {
        }
    })     

整個ajax的內容包含在$.ajax({  })中

第一行url:指定ajax發送給哪個url進行處理,再通過urls.py文件去執行對應的處理函數

第二行type:ajax發送數據的方式,可以是GET或者POST,如果使用POST方法可先注釋掉csvf中間件

第三行data:ajax發送的數據,需要是字典格式,且v默認是數字或者字符串

第六行success:表示后台處理函數處理成功后,前端再執行的函數,參數arg表示處理函數的返回值,即HttpResponse的返回值,且只能接收字符串格式

第四行dataType:由於success的function函數默認只能接收字符串格式的返回值,因此如果處理函數需要返回其他格式如字典、列表形式的值,需要通過HttpResponse(json.dumps(返回值))傳遞給arg,而在ajax中需要再通過JSON.parse(arg)再將返回值還原為原來的格式,而dataType:'JSON'可以省略前端的JSON.parse(arg),直接將返回值通過JSON還原為原來的格式后再傳遞給arg。

第五行traditional:ajax發送的數據字典的值默認是數字或者字符串,如果值是列表(不能是字典),則需要指定traditional:true

第七行error:例如當指定的url錯誤、網絡錯誤等,會執行此函數。

ajax不接收處理函數返回的redirect跳轉,只會根據函數返回的消息內容主動決定是否做刷新或跳轉。

 1.ajax發送get請求

.btn{display:inline-block;background-color: darkgoldenrod;padding: 5px 10px;color: white;cursor: pointer}
……
<a class="btn" onclick="ajaxSubmit3()">點我</a>
……
function ajaxSubmit3() {
    $.ajax({
        url:'ajax1',
        type:'POST',
        data:{'p':123},
        dataType:'json',
        success:function (arg) {
        console.log(arg.status,arg.data)
        }
    })
}
模板和使用ajax發送get請求
def ajax1(request):
    print(request.GET)
    ret = {'status':'success','data':[1,'hello']}
    return HttpResponse(json.dumps(ret))
后台處理函數

     

2.ajax發送post請求

<a class="btn" onclick="ajaxSubmit3()">點我</a>
……
function ajaxSubmit3() {
    $.ajax({
        url:'ajax1',
        type:'POST',
        data:{'p':123},
        dataType:'json',
        success:function (arg) {
        console.log(arg.status,arg.data)
        }
    })
}
View Code
def ajax1(request):
    print(request.POST)
    ret = {'status':'success','data':[1,'hello']}
    return HttpResponse(json.dumps(ret))
后台處理函數

     

 

二、使用瀏覽器自帶的XMLHttpRequest對象

XMLHttpRequest為瀏覽器自帶的發送數據的對象,使用XMLHttpRequest發送數據時,需要手動加上請求頭。

XmlHttpRequest對象的主要方法:

void open(String method,String url,Boolen async)  #用於創建請求
    method: 請求方式(字符串類型),如:POST、GET、DELETE...            
    url:要請求的地址(字符串類型)
    async:  是否異步(布爾類型)

void send(String body)  #用於發送請求
    body: 要發送的數據(字符串類型)

void setRequestHeader(String header,String value)  #用於設置請求頭
    header: 請求頭的key(字符串類型)
    vlaue:  請求頭的value(字符串類型)

String getAllResponseHeaders()  #獲取所有響應頭
    返回值:響應頭數據(字符串類型)

String getResponseHeader(String header)  #獲取響應頭中指定header的值
    header: 響應頭的key(字符串類型)
    返回值:響應頭中指定的header對應的值

void abort()  #終止請求
XmlHttpRequest對象主要方法
Number readyState  #狀態值(整數)
    0-未初始化,尚未調用open()方法;
    1-啟動,調用了open()方法,未調用send()方法;
    2-發送,已經調用了send()方法,未接收到響應;
    3-接收,已經接收到部分響應數據;
    4-完成,已經接收到全部響應數據;
 
Function onreadystatechange
   當readyState的值改變時自動觸發執行其對應的函數(回調函數)
 
String responseText
   服務器返回的數據(字符串類型)
 
XmlDocument responseXML
   服務器返回的數據(Xml對象)
 
XmlHttpRequest對象主要屬性

1.XMLHttpRequest發送get請求

<a class="btn" onclick="ajaxSubmit2()">點我</a>
……
function ajaxSubmit2() {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4)
            console.log(xhr.responseText);
        }
    xhr.open('GET','ajax1');
    xhr.send(null);
}    
模板和使用XMLHttpRequest發送get請求
def ajax1(request):
    print(request.GET)
    print(request.body)
    ret = {'status':'success','data':[1,'hello']}
    return HttpResponse(json.dumps(ret))
后台處理函數

2.XMLHttpRequest發送POST請求

<a class="btn" onclick="ajaxSubmit4()">點我</a>
……
function ajaxSubmit4() {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4)
            console.log(xhr.responseText);
    }
    xhr.open('POST','ajax1');
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset-UTF-8');
    xhr.send('p=123;q=456');
}
模板和使用XMLHttpRequest發送post請求
def ajax1(request):
    print(request.POST)
    print(request.body)
    ret = {'status':'success','data':[1,'hello']}
    return HttpResponse(json.dumps(ret))
后台處理函數

①發送post請求時需要先注釋掉csvf中間件

②XMLHttpRequest對象xhr狀態變化時即xhr.readyState的值變化時,會觸發xhr.onreadystatechange。

③如果不為XMLHttpRequest對象設置請求頭,那么后台接收到的數據在request.body中,request.POST中沒有數據;需要用setRequestHeader()方法為其設置請求頭,django才會將接收到的數據同時轉化到request.POST中。

④使用send()發送數據時,整體為字符串,使用k=v形式發送,多個數據之間用分號間隔;

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM