Django ä¹Ajax
å¿ å¤ç¥è¯ï¼json
ä»ä¹æ¯json
å®ä¹
JSON(JavaScript Object Notation, JS 对象æ è®°) æ¯ä¸ç§è½»éçº§çæ°æ®äº¤æ¢æ ¼å¼ã
å®åºäº ECMAScript (w3cå¶å®çjsè§è)çä¸ä¸ªåéï¼éç¨å®å
¨ç¬ç«äºç¼ç¨è¯è¨çææ¬æ ¼å¼æ¥åå¨åè¡¨ç¤ºæ°æ®ã
ç®æ´åæ¸
æ°ç屿¬¡ç»æä½¿å¾ JSON æä¸ºçæ³çæ°æ®äº¤æ¢è¯è¨ã æäºäººé
读åç¼åï¼åæ¶ä¹æäºæºå¨è§£æåçæï¼
å¹¶ææå°æåç½ç»ä¼ è¾æçã
请æ±webç½ç«çæ¹å¼
è¯·æ±æ¹æ³ è¯·æ±æ¹å¼ 1ã å°åæ url getè¯·æ± 2ã è¶ é¾æ¥æ ç¾ getè¯·æ± 3ã form表å getè¯·æ± postè¯·æ± 4ã ajaxè¯·æ± getè¯·æ± post请æ±
stringifyä¸parseæ¹æ³
JSON.parse(): ç¨äºå°ä¸ä¸ª JSON å符串转æ¢ä¸º JavaScript 对象ã eg: console.log(JSON.parse('{"name":"Yuan"}')); console.log(JSON.parse('{name:"Yuan"}')) ; // é误 console.log(JSON.parse('[12,undefined]')) ; // é误 JSON.stringify(): ç¨äºå° JavaScript å¼è½¬æ¢ä¸º JSON å符串ãã eg: console.log(JSON.stringify({'name':"egon"})) ;
ä»ç»
Ajax
ããAjaxï¼Asynchronous Javascript And XMLï¼ç¿»è¯æä¸æå°±æ¯â弿¥JavascriptåXMLâãå³ä½¿ç¨Javascriptè¯è¨ä¸æå¡å¨è¿è¡å¼æ¥äº¤äºï¼ä¼ è¾çæ°æ®ä¸ºXMLï¼å½ç¶ï¼ä¼ è¾çæ°æ®ä¸åªæ¯XMLï¼ã
- åæ¥äº¤äºï¼å®¢æ·ç«¯ååºä¸ä¸ªè¯·æ±åï¼éè¦çå¾ æå¡å¨ååºç»æåï¼æè½ååºç¬¬äºä¸ªè¯·æ±ï¼
- 弿¥äº¤äºï¼å®¢æ·ç«¯ååºä¸ä¸ªè¯·æ±åï¼æ éçå¾ æå¡å¨ååºç»æï¼å°±å¯ä»¥ååºç¬¬äºä¸ªè¯·æ±ã
ããAjaxé¤äºå¼æ¥çç¹ç¹å¤ï¼è¿æä¸ä¸ªå°±æ¯ï¼æµè§å¨é¡µé¢å±é¨å·æ°ï¼ï¼è¿ä¸ç¹ç¹ç»ç¨æ·çæåæ¯å¨ä¸ç¥ä¸è§ä¸å®æè¯·æ±åååºè¿ç¨ï¼ãå æ¤ä½¿ç¨ajaxç主è¦ç¹ç¹æå¦ä¸å ç¹ï¼ï¼1ï¼Ajax使ç¨Javascriptææ¯åæå¡å¨åé弿¥è¯·æ±ï¼ï¼2ï¼Ajaxæ 须巿°æ´ä¸ªé¡µé¢ï¼ï¼3ï¼å 为æå¡å¨ååºå 容ä¸åæ¯æ´ä¸ªé¡µé¢ï¼èæ¯é¡µé¢ä¸çå±é¨ï¼æä»¥Ajaxæ§è½é«ãå¨djangoå ¥é¨é¡¹ç®ä¸æä»¬å·²ç»ç®åçä»ç»äºä¸ä¸ajaxåºç¨ãä¸é¢æä»¬å°å详ç»ä»ç»ã
Ajaxçä¼ç¼ºç¹
ä¼ç¹ï¼
Ajax使ç¨JavaScriptææ¯åæå¡å¨åé弿¥è¯·æ±;
Ajaxæ 须巿°æ´ä¸ªé¡µé¢ï¼æé«ç¨æ·çä½éªåº¦
å 为æå¡å¨ååºå 容ä¸åæ¯æ´ä¸ªé¡µé¢ï¼èæ¯é¡µé¢ä¸çå±é¨ï¼æä»¥Ajaxæ§è½é«
å ³äºAJAXçä¾å
ajaxå®ç°æ¹å¼ï¼æ åæ°ï¼
ããå ·ä½å®ç°æ¹å¼å®ä¾å¦ä¸ï¼å®æä¸æ¬¡ajax请æ±ï¼ä¸å®æäºä¸ä¸ªå±é¨å·æ°ï¼ï¼
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>Title</title> <script src="/static/js/jquery-3.2.1.min.js"></script> </head> <body> <h3>INDEX</h3> <button class="s1">send_ajax</button> <p class="name"></p> <script> // ajaxçæ åè¯·æ± $(".s1").click(function () { // 触åajaxäºä»¶ $.ajax({ url: "/ajax_handle/", type: "get", success: function (data) { {# dataç¸å½äºæå¡ç«¯æ¿è¿æ¥ç"é»è¯"çæ°æ® #} {# 彿ä¸ä¸ªäºä»¶å®æä¹åï¼åºå®æ§è¡å¦å¤ä¸ä¸ªå½æ° #} {# å¨è¿ésuccessä¹ç¸å½äºä¸ä¸ªåè°å½æ°ï¼ å½æä»¬è¯·æ±è¿å»ï¼å°è¾¾æå¡å¨ï¼
æå¡å¨ååºè¿æ¥return HttpResponse("é»è¯")ï¼è¿ésuccesså¼å§å·¥ä½ ï¼ææ°æ®ååºå°å®¢æ·ç«¯ è¿æ ·å°±æ¯å®æ´çè¿ç¨ #} console.log(data); {# 宿䏿¬¡ajax请æ±ï¼ä¸å®æäºä¸ä¸ªå±é¨å·æ°#} $(".name").html(data) {# æä¸ä¸ªdataå符串èµå°ä¸ä¸ªææ¬ä¸ #} } }) }); </script> </body> </html>
from django.shortcuts import render,HttpResponse
# Create your views here.
def index(request):
return render(request,"index.html")
def ajax_handle(request):
return HttpResponse("é»è¯")
url(r'^index/', views.index), # index(request) å¿
é¡»éä¼ ä¸ä¸ªåæ°
url(r'^ajax_handle/', views.ajax_handle), # index(request)
å ³äºAJAXçæåæä½
<!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>Title</title> <script src="/static/js/jquery-3.2.1.min.js"></script> </head> <body> <input type="text" id="n1">+<input type="text" id="n2">=<input type="text" id="sum"> {#为ä»ä¹ä¸éè¦nameæ ç¾ï¼form表åçä½ç¨ï¼ç¹submitçæé®,èªå¨ç»å®äºä»¶ï¼ä»¥name,ajax,æ¯æä»¬ç´æ¥æ¼é®å¼å¯¹äºï¼æä»¬åçæ¯ä»ä¹ï¼ä»å°±æ¯ä»ä¹#} <button class="count">计ç®</button> <script> // ajaxçæåè¯·æ± //ç»å®ç¹å»äºä»¶ $(".count").click(function () { //触åajaxè¯·æ± $.ajax({ url:"/count/", {# data-->æå®ä½ è¦æ¾çåæ°#} data:{"num1":$("#n1").val(),"num2":$("#n2").val()}, {# è¿éåç齿¯JavaScript代ç ,ä¸Pythonæ å ³ï¼ä¸æ¯åå ¸,æ¯åºäºjsçæ°æ®ç±»åï¼objç±»å#} {# è¿éå é®å¼å¯¹#} success:function (data) { console.log(data); $("#sum").val(data) } }) }) </script> </body> </html>
def count(request):
num1 = request.GET.get("num1")
num2 = request.GET.get("num2")
ret = int(num1)+int(num2)
return HttpResponse(str(ret))
注æç¹
dataéé¢çç±»åé¡»æ¯ç¬¦ååºååå符串
æ ¡éªç¨æ·æ³¨åä¿¡æ¯
<!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>Title</title> <script src="/static/js/jquery-3.2.1.min.js"></script> </head> <body> {% csrf_token %} <h4>æ ¡éªç¨æ·æ¯å¦åå¨</h4> <input type="text" id="user"><span></span> <script> //æ ¡éªæ³¨åä¿¡æ¯ $("#user").blur(function () { $.ajax({ url: "/jiaoyan_user/", {# å¤ç页é¢å°åï¼è¡¨ç¤ºajaxè¦ç¨ #} type: "post", {# ä¼ å¼æ¹å¼ #} data: { {# ä¼ éå°å¤ç页é¢çå¼ï¼ä¹æ¯jsonæ°æ® #} "user": $("#user").val(), "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val()}, success: function (data) { {# 表示å¤çæåä¹ååä»ä¹ï¼åé¢è·çä¸ä¸ªå¿å彿°ãåè°å½æ°ï¼è¡¨ç¤ºå¤ç页é¢å¤ç宿°æ®ä»¥åæ§è¡è¿ä¸ªå½æ°ãdata表示å¤ç页é¢è¿åçå¼ï¼ç¨å½¢åæ¥æ¶ #} console.log(data); var data = JSON.parse(data); {# ååºåå为åå ¸#} if (data.is_reg) { $("#user").next().html("è¯¥ç¨æ·å·²æ³¨å").css("color","red"); {# 彿³¨åï¼æ·»å é误信æ¯ï¼å¡«å å°åé¢çspanæ ç¾#} } } }) }) </script> </body> </html>
def jiaoyan_user(request):
response={"is_reg":True}
user=request.POST.get("user")
# == è¡¨ç¤ºå¨æ°æ®åºéæ
if user == "jassin":
pass
else:
response["is_reg"] = False
import json
# è¿åå°é¡µé¢ï¼è¦åºååæå符串
return HttpResponse(json.dumps(response))
url(r'^jiaoyan_user/', views.jiaoyan_user), # index(request)
注æç¹
å ³äºcsrfé误
csrfè·¨ç«è¯·æ±ä¼ªé
æ¹å¼ä¸
$.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, });
æ¹å¼äº
<form> {% csrf_token %} </form><br><br><br>$.ajax({<br>...<br>data:{ "csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val(); }<br>})
æ¹å¼ä¸
<script src="{% static 'js/jquery.cookie.js' %}"></script> $.ajax({ headers:{"X-CSRFToken":$.cookie('csrftoken')}, })
ç¨æ·ç»å½éªè¯ä¾å
$.ajaxåæ°
请æ±åæ°
data
dataï¼å½åajax请æ±è¦æºå¸¦çæ°æ®ï¼æ¯ä¸ä¸ªjsonçobject对象ï¼ajaxæ¹æ³å°±ä¼é»è®¤çæå®ç¼ç ææç§æ ¼å¼ (urlencoded:?a=1&b=2)åéç»æå¡ç«¯ï¼æ¤å¤ï¼ajaxé»è®¤ä»¥getæ¹å¼åé请æ±ã function testData() { $.ajax("/test",{ //æ¤æ¶çdataæ¯ä¸ä¸ªjsonå½¢å¼ç对象 data:{ a:1, b:2 } }); //?a=1&b=2
contenType
contentTypeï¼é»è®¤å¼: "application/x-www-form-urlencoded"ãåéä¿¡æ¯è³æå¡å¨æ¶å 容ç¼ç ç±»åã ç¨æ¥ææå½å请æ±çæ°æ®ç¼ç æ ¼å¼ï¼urlencoded:?a=1&b=2ï¼å¦ææ³ä»¥å ¶ä»æ¹å¼æäº¤æ°æ®ï¼ æ¯å¦contentType:"application/json"ï¼å³åæå¡å¨åéä¸ä¸ªjsonåç¬¦ä¸²ï¼ $.ajax("/ajax_get",{ data:JSON.stringify({ a:22, b:33 }), contentType:"application/json", type:"POST", }); //{a: 22, b: 33} 注æï¼contentType:"application/json"䏿¦è®¾å®ï¼dataå¿ é¡»æ¯jsonå符串ï¼ä¸è½æ¯json对象 views.py: json.loads(request.body.decode("utf8"))
contentTypeç±»åä¸ã
ããä¸è¿°å®ä¾ä¸æ¯æä»¬å¯¹ajaxçåºæ¬ä½¿ç¨ï¼ä¹æ¯ajaxä¸åæ°contentTypeçé»è®¤ä½¿ç¨æ¹å¼ï¼ä»å³å®äºåéä¿¡æ¯è³æå¡å¨æ¶å 容ç¼ç çç±»åãç°å°æ¤åæ°çé»è®¤ä½¿ç¨æ¹å¼æ»ç»å¦ä¸ï¼
dataï¼å½åajax请æ±è¦æºå¸¦çæ°æ®ï¼æ¯ä¸ä¸ªobject对象ï¼ajaxæ¹æ³å°±ä¼é»è®¤å°æå®ç¼ç ææç§æ ¼å¼(urlencoded:?a=1&b=2)åéç»æå¡ç«¯ï¼æ¤å¤ï¼ajaxé»è®¤ä»¥getæ¹å¼åé请æ±ã contentTypeï¼"application/x-www-form-urlencoded"ãåéä¿¡æ¯è³æå¡å¨æ¶å 容ç¼ç ç±»åãç¨æ¥ææå½å请æ±çæ°æ®ç¼ç æ ¼å¼ï¼urlencoded:?a=1&b=2ï¼
contentTypeç±»åäºãã
ããä¸è¿°è¿ç§é»è®¤åæ°å½¢å¼ï¼dataä¸çcsrfè·¨ç«è¯·æ±ä¼ªé é®å¼å¯¹ä¼è¢«ä¸é´ä»¶èªå¨è¯å«ï¼contentTypeåæ°è¿æå¦ä¸ä¸ç§å½¢å¼ï¼ä»ç»å¦ä¸ï¼
contentType:"application/json"ï¼å³åæå¡å¨åéä¸ä¸ªjsonå符串ã
注æï¼contentType:"application/json"䏿¦è®¾å®ï¼dataå¿ é¡»æ¯jsonå符串ï¼ä¸è½æ¯json对象