AJAX(Asynchronous Javascript And XML)翻譯成中文就是「異步的Javascript和XML」。即便用Javascript語言與服務器進行異步交互,傳輸的數據爲XML(固然,傳輸的數據不僅是XML,如今更多使用json數據)。html
AJAX 不是新的編程語言,而是一種使用現有標準的新方法。python
AJAX 最大的優勢是在不從新加載整個頁面的狀況下,能夠與服務器交換數據並更新部分網頁內容。(這一特色給用戶的感覺是在不知不覺中完成請求和響應過程)jquery
AJAX 不須要任何瀏覽器插件,但須要用戶容許JavaScript在瀏覽器上執行。ajax
a.同步交互:客戶端發出一個請求後,須要等待服務器響應結束後,才能發出第二個請求;django
b.異步交互:客戶端發出一個請求後,無需等待服務器響應結束,就能夠發出第二個請求。編程
AJAX除了異步的特色外,還有一個就是:瀏覽器頁面局部刷新;(這一特色給用戶的感覺是在不知不覺中完成請求和響應過程json
頁面輸入兩個整數,經過AJAX傳輸到後端計算出結果並返回。後端
html文件名稱爲ajax_demo1.html,內容以下瀏覽器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>AJAX局部刷新實例</title> </head> <body> <input type="text" id="i1">+ <input type="text" id="i2">= <input type="text" id="i3"> <input type="button" value="AJAX提交" id="b1"> <script src="/static/jquery-3.2.1.min.js"></script> <script> $("#b1").on("click", function () { $.ajax({ url:"/ajax_add/", //別忘了加雙引號 type:"GET", data:{"i1":$("#i1").val(),"i2":$("#i2").val()}, //object類型,鍵值形式的,能夠不給鍵加引號 success:function (data) { $("#i3").val(data); } }) }) </script> </body> </html>
views.py裏面的內容:服務器
def ajax_demo1(request): return render(request, "ajax_demo1.html") def ajax_add(request): #time.sleep(10) #不影響頁面發送其餘的請求 i1 = int(request.GET.get("i1")) i2 = int(request.GET.get("i2")) ret = i1 + i2 return JsonResponse(ret, safe=False) #return render(request,'index.html') #返回一個頁面沒有意義,就是一堆的字符串,拿到了這個頁面,你怎麼處理,你要作什麼事情,根本就沒有意義
urls.py裏面的內容:
urlpatterns = [ ... url(r'^ajax_add/', views.ajax_add), url(r'^ajax_demo1/', views.ajax_demo1), ... ]
啓動django項目,而後運行看看效果,頁面不刷新
搜索引擎根據用戶輸入的關鍵字,自動提示檢索關鍵字。
還有一個很重要的應用場景就是註冊時候的用戶名的查重。
其實這裏就使用了AJAX技術!當文件框發生了輸入變化時,使用AJAX技術向服務器發送一個請求,而後服務器會把查詢到的結果響應給瀏覽器,最後再把後端返回的結果展現出來。
a.整個過程當中頁面沒有刷新,只是刷新頁面中的局部位置而已!
b.當請求發出後,瀏覽器還能夠進行其餘操做,無需等待服務器的響應!
當輸入用戶名後,把光標移動到其餘表單項上時,瀏覽器會使用AJAX技術向服務器發出請求,服務器會查詢名爲lemontree7777777的用戶是否存在,最終服務器返回true表示名爲lemontree7777777的用戶已經存在了,瀏覽器在獲得結果後顯示「用戶名已被註冊!」。
a.整個過程當中頁面沒有刷新,只是局部刷新了;
b.在請求發出後,瀏覽器不用等待服務器響應結果就能夠進行其餘操做;
1.AJAX使用JavaScript技術向服務器發送異步請求;
2.AJAX請求無須刷新整個頁面;
3.由於服務器響應內容再也不是整個頁面,而是頁面中的部份內容,因此AJAX性能高;
<button class="send_Ajax">send_Ajax</button> <script> $(".send_Ajax").click(function(){ $.ajax({ url:"/handle_Ajax/", type:"POST", data:{username:"chao",password:123}, success:function(data){ console.log(data) }, error: function (jqXHR, textStatus, err) { console.log(arguments); }, complete: function (jqXHR, textStatus) { console.log(textStatus); }, statusCode: { '403': function (jqXHR, textStatus, err) { console.log(arguments); }, '400': function (jqXHR, textStatus, err) { console.log(arguments); } } }) }) </script>
var b2 = document.getElementById("b2"); b2.onclick = function () { // 原生JS var xmlHttp = new XMLHttpRequest(); xmlHttp.open("POST", "/ajax_test/", true); xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlHttp.send("username=chao&password=123456"); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { alert(xmlHttp.responseText); } }; };
$.ajax({ url: "/cookie_ajax/", type: "POST", data: { "username": "anwe", "password": 123456, "csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val() // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中 }, success: function (data) { console.log(data); } })
$.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, });
ContentType指的是請求體的編碼類型,常見的類型共有3種:
這應該是最多見的 POST 提交數據的方式了。瀏覽器的原生