Django中的Ajax詳解

2022-09-17 12:12:08 字數 3023 閱讀 3460

ajax(asynchronous j**ascript and xml)翻譯成中文就是「非同步j**ascript和xml」。即使用j**ascript語言與伺服器進行非同步互動,傳輸的資料為xml(當然,傳輸的資料不只是xml)。

同步互動:客戶端發出乙個請求後,需要等待伺服器響應結束後,才能發出第二個請求;

非同步互動:客戶端發出乙個請求後,無需等待伺服器響應結束,就可以發出第二個請求。

ajax除了非同步的特點外,還有乙個就是:瀏覽器頁面區域性重新整理;(這一特點給使用者的感受是在不知不覺中完成請求和響應過程)

一.ajax常見應用情景

其實這裡就使用了ajax技術!當檔案框發生了輸入變化時,瀏覽器會使用ajax技術向伺服器傳送乙個請求,查詢包含「傳」字的前10個關鍵字,然後伺服器會把查詢到的結果響應給瀏覽器,最後瀏覽器把這4個關鍵字顯示在下拉列表中。

當輸入使用者名稱後,把游標移動到其他表單項上時,瀏覽器會使用ajax技術向伺服器發出請求,伺服器會查詢名為zhangsan的使用者是否存在,最終伺服器返回true表示名為lemontree7777777的使用者已經存在了,瀏覽器在得到結果後顯示「使用者名稱已被註冊!」。

優點:二.$.ajax引數

我們首先來看乙個常見的ajax請求的例子,該例子使用ajax來傳送點讚請求:

$(document).ready(function () ,

success:function (data)

//判斷status的狀態,為true則點讚成功,那麼將當前的點讚數+1,並且列印點讚成功的訊息

console.log(data); //

if(data.status),

3000

) }

else

if(data.is_repeat),

3000

) }}})

}//使用者未登入

else

, 3000

); location.href = "

/login/?next=

" +location.pathname

}});

});

$.ajax的請求引數

######################------------data---------################

data: 當前ajax請求要攜帶的資料,是乙個json的object物件,也就是乙個json物件

ajax方法就會預設地把它編碼成某種格式(urlencoded:?a=1&b=2

)傳送給服務端;此外,ajax預設以get方式傳送請求。

function testdata()

});

//?a=1&b=2

######################------------processdata---------################

processdata:宣告當前的data資料是否進行轉碼或預處理,預設為true,即預處理;如果設定為false,

那麼對data:會呼叫json物件的tostring()方法,即.tostring()

,最後得到乙個[

object

,object]形式的結果。

######################------------contenttype---------################

contenttype:預設值: ""

。傳送資訊至伺服器時內容編碼型別。

即告訴伺服器,我客戶端使用的資料編碼格式是urlencoded:urlencoded:?a=1&b=2

;如果想以其他方式提交資料,比如contenttype:""

,即客戶端告訴伺服器,我傳送的是乙個json字串:

這裡一定要注意,一旦設定了contenttype:""

,那麼我們傳送給伺服器端的資料data必須就是乙個json字串,不能

是json物件,要不然會報錯,這也就是為什麼我們需要使用json.stringify來將json物件序列化為乙個json字串的原因了!

$.ajax(

"/ajax_get

",),

contenttype:""

, type:

"post",

});

//當客戶端設定了我傳送給服務端的是json字串時,那麼服務端拿到資料肯定需要將資料進行反序列化為乙個python字串

注意此時如果我們設定了客戶端使用的是post方式傳送,那麼我們在服務端取資料的時候就應該從請求體中拿出資料:

request.body.decode(

"utf8

"),取出的是乙個位元組字串,然後使用json.loads進行反序列化成python中的物件

views.py: json.loads(request.body.decode(

"utf8"))

######################------------traditional---------################

traditional:一般是我們的data資料有陣列時會用到 :data:,

traditional為false會對資料進行深層次迭代;

響應引數:datatype

datatype的功能: 設定httpheader中「accept」域的內容,告訴伺服器瀏覽器可以想要返回的資料格式型別,同時jquery也會根據該型別對返回的資料進行相應的格式轉換,例如客戶端設定datatype的值為:"json",表示我告訴服務端,你返回給我的資料必須是json格式的字串,

一旦服務端返回給我json字串後,我可以直接使用,因為jquery會自動將json字串轉換為js物件,不需要我們手動去轉換:json.parse()

參考**:

django中的filter詳解

我們很少會一次性從資料庫中取出所有的資料 通常都只針對一部分資料進行操作。在django api中,我們可以使用 filter 方法對資料進行過濾 publisher.objects.filter name apress filter 根據關鍵字引數來轉換成 where sql語句。前面這個例子 相...

詳解Python的Django框架中的中介軟體

什麼是中介軟體 我們從乙個簡單的例子開始。高流量的站點通常需要將django部署在負載平衡proxy之後。這種方式將帶來一些複雜性,其一就是每個request中的遠端ip位址 request.meta remote ip 將指向該負載平衡proxy,而不是發起這個request的實際ip。負載平衡p...

ajax中error函式引數詳解

xhr.status和error函式中的status是不一樣的,error函式中的status主要包括 success notmodified error timeout parsererror 而xhr.status如下所講。一 error function xmlhttprequest,text...