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...