前端交流企鹅:724396871
今天写了一个网站登录的ajax请求,发现总是出现这个405的问题,结果在网上找了很久。都没能解决。
var username = $(".username").val();var pwd = $(".password").val();var param = {'Name':username,'Pwd':pwd};console.log("Request param = "+JSON.stringify(param));$.ajax({type:"post",url:"http://localhost:1405/api/login/valid",dataType:'json',contentType:"application/json",data:JSON.stringify(param),async:false,success:function(res){alert(res);},error:function(){alert("登录失败!")}});
上面这个是我一开始的请求。
老司机可能一眼就看出了问题,然而我初出茅驴,木得什么经验。针对405的原因:不被允许的请求。稍微想一下,为什么不被允许,是不是我的红包没塞到位?就这样转头一想,我聚焦到了我的data上。
contentType:"application/json",data:JSON.stringify(param)
也不知道当初为什么,非要给data加上一个转字符串。这样的一个方式,转换为json字符串形式,这样会不会后台有这怎么的冲突?
之后查看了api的文档发现,后台需要传入的参数是对象。
之后情形就明了了,将contentType删除,在将data属性的类型修改成字符串
就能请求成功了。
登录成功的返回值。
备用:常见出现405错误的可能原因
1.在接口调用的方式或者参数不对的时候会出现405错误。例如接口为delete类型,参数携带在url中,错写成post类型会导致报405的错误
2.接口需求的传参为url传参,前端请求时将参数放在body中。
3.跨域问题 跨域问题是个老生常谈的问题,解决起来大多需要后台来配合解决。所以快去找你们后台商量吧!
总结:在遇到类似问题的时候,首要找到出现问题的原因,同一个问题出现的原因是不尽相同的,不可以盲从别人解决问题的办法。注意前后台的一致性,否则会花掉大量的时间做一些无用功。