前后端在做數據交互的時候 一定一定要表明你所發的的數據到底是什么格式
前段后交互 你不能騙人家,不然后端開發人員來找你的時候會抄着一根凳子腿。
你的數據時什么格式 你就應該准確無誤告訴別人是什么格式
那么怎么告訴后端你要發送的數據的格式是什么呢
form 表單是通過 他的 enctype
而 ajax 是通過 contentType,如果你要傳送的數據是json(通常只有json格式)
你需要這么寫 contentType:'application/json'
要怎樣發送一個json格式的數據呢? 后端有json.dumps 前端有JSON.stringify()。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<input type="text" id="t1"> + <input type="text" id="t2"> = <input type="text" id="t3">
<p>
<button id="b1">計算</button>
</p>
<script>
$('#b1').on('click',function () {
$.ajax({
url:'',
type:'post',
contentType:'application/json',
{#data:{'t1':$('#t1').val(),'t2':$('#t2').val()},#}
data:JSON.stringify({'username':'chanyuli','password':'123'}),
success:function (data) {
$('#t3').val(data)
{#alert(data)#}
}
})
})
</script>
</body>
</html>
這時候就會發現后端 post 里面沒有任何信息了,這就是之前講過的,django后端會對不同的數據格式進行不同的處理,這又不是 xxxxx&xxxxx類型的。所以沒有在post里面。
Ajax傳json格式數據:django后端針對json格式的數據 不會自動幫你解析 會直接原封不動的給你放到request.body中 你可以手動處理 獲取數據。
這時候去后端 打request.body ,發現是一個b'{"username":"chanyuli","password":"123"}
是一個bytes類型的數據,這時候我們自己反序列化就好了。
注意點
1.指定contentType參數
contentType:'application/json',
2.要將你發送的數據 確保是json格式的
data:JSON.stringify({'username':'jason','password':'123'})
注意:有些時候 request.body 會看不了,django會給你報錯。