最近寫登錄的頁面,發(fā)現(xiàn)通過ajax請(qǐng)求后臺(tái)的時(shí)候,監(jiān)控臺(tái)返回該請(qǐng)求的狀態(tài)是canceled。
原因
僅僅是由于之前為了在輸入賬號(hào)時(shí)讓瀏覽器進(jìn)行自動(dòng)補(bǔ)全,而將原先的div更換為了form,而不巧的是之前的登錄事件源使用的是button。
而至于為什么status = canceled,是由于在提交時(shí),form action與綁定于button上的click事件會(huì)同時(shí)觸發(fā)。form action將表單內(nèi)容以serach的形式追加至當(dāng)前url上,url變更后會(huì)導(dǎo)致頁面重新加載, 而這正是導(dǎo)致post請(qǐng)求在執(zhí)行后就被終止的原因。
解決方案
form.on("submit(login)",function(data){
$.ajax({
url:"/schema/login",
data:{
username:data.field.username,
password:data.field.password
},
dataType: "json",
contentType: "application/json; charset=utf-8",
async:false,
success:function (res) {
if("success" == res){
window.location.href = "../index.html";
return false;
}
},
error:function (res) {
alert("失敗,請(qǐng)重新登錄!");
}
})
return false;
})
最后發(fā)現(xiàn)是ajax請(qǐng)求默認(rèn)是異步的。我把請(qǐng)求改成同步的就行了。設(shè)置如下參數(shù):async: false。