在寫項目中遇到的一些ajax的坑,在這裡做一下記錄
一、先放一個完整的前,後端示例
<!-- 使用者登入 -->
<div id="login" class="layout_login">
<div class="layout_login_" id="login_b">
<div class="layout_login_title">
使用者登入
</div>
<div id="error_msg_login" style="color: red; text-align: center"></div>
<form id="loginForm">
<div class="layout_login_input">
<input type="text" name="username" id="id_username_login" placeholder="賬号" class="input_"/>
<input type="password" name="password" id="id_password_login" placeholder="密碼" class="input_"/>
<input type="text" name="checkcode_login" id="id_checkcode_login" placeholder="驗證碼"
class="layout_login_input_checkcode" style="float: left;"/><img
src="{% url 'demo_app:getcode' %}" class="checkCode" style="float: right;"
onclick="changeCheckCode(this)">
<script type="text/javascript">
//圖檔點選事件
function changeCheckCode(img) {
img.src = "{% url 'demo_app:getcode' %}?time=" + new Date().getTime();
}
</script>
</div>
<input type="button" value="登入" class="layout_login_btn" id="login-form">
</form>
<div class="layout_login_url" id="onreg1">
沒有賬号?去注冊>>
</div>
</div>
</div>
$("#login-form").click(function () {
//1.發送資料到伺服器
if (checkUsername_login() && checkPassword_login() && checkCheckcode_login()) {
//校驗通過,發送ajax請求,送出表單的資料
$.post("login", $("#loginForm").serialize(), function (data) {
//處理伺服器響應的資料 data {flag:true,errorMsg:"登入失敗!"}
if (data.code === 1) {
console.log("登入成功!");
//登入成功,跳轉成功頁面
location.href = "index";
} else {
//登入失敗,給errorMsg添加提示資訊
console.log("登入失敗!")
$("#error_msg_login").empty();
$("#error_msg_login").append(data.msg);
}
});
} else {
}
//2.跳轉頁面
return false;
});
views的ajax接受方法
def State(request):
"""
擷取使用者登入狀态函數,通過session實作
"""
if request.method == 'GET':
...
#要注意Ajax處理要放在中間
if request.is_ajax():
...
return JsonResponse({'res':'成功'})
if request.method == 'POST':
...
#如果是類視圖
class K (View):
def get(self,request):
if self.request.is_ajax:
pass
else:
pass
def post(self,request):
if self.request.is_ajax:
pass
else:
pass
二、button,type = "submit" 和 Ajax 不能同時使用,否則Ajax調用不成功
button按鈕的type屬性的預設值是submit,有送出form表單的功能。換成span标簽可行,但是還要改樣式,直接更改button的type為button
<button>點我送出</button> → <button type="button">點我送出</button>