使用Ajax调用接口校验数据出现的问题
项目场景:
问题描述
该问题出现在Ajax调用接口时,使用beforeSend发送Authorization后,服务器返回415报错,无法访问接口并接收数据!但是在另一个页面使用这个方法==beforeSend: function(request)==就可以
Ajax调用接口回传数据代码:
$.ajax({ type: "POST", url: "http://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", async: false, // 注意同步异步的问题 beforeSend: function(request) { request.setRequestHeader("Authorization","************************************"); }, contentType: "application/json", data: JSON.stringify([ { "###": value }]), success: function (response) { //console.log(response.data[0].state); if (response.data[0].state != 0) { js.showErrorMessage("^^^^^^^^^^^^^^^^^^^^^^^^"); }} });
原因分析:
目前还没有找到很合理的解释
这位博主应该和我遇到过相同的问题,但是具体什么原因并未说清
我一直比较疑惑,在此项目的另一个接口请求数据中同样使用Ajax访问,相同的Authorization,不同的是GET请求,就可以使用beforeSend方法request.setRequestHeader(“Authorization”,“***********”);
现在的情况就是做两手准备,一个不行就用另一个。
补充 beforeSend: function(request) 和 beforeSend: function(xmlHttpRequest) 也是有区别的;在这个问题中beforeSend: function(xmlHttpRequest) 也可以解决我的问题;
还需要进一步找出区别在哪里!做上记录以后还可能会用到!
解决方案:
将beforeSend: function(request) 方法改为headers方法,或者使用beforeSend: function(xmlHttpRequest) 方法
第一种方案
$.ajax({ type: "POST", url: "http://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", async: false, // 注意同步异步的问题 headers: { "Authorization": "**************************************" }, contentType: "application/json", data: JSON.stringify([ {"###": value } ]), success: function (response) { //console.log(response.data[0].state); if (response.data[0].state != 0) { js.showErrorMessage("^^^^^^^^^^^^^^^^^^^^^^^^"); } } });
第二种方案
$.ajax({ type: "POST", url: "http://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", async: false, // 注意同步异步的问题 beforeSend: function(xmlHttpRequest) {xmlHttpRequest.setRequestHeader("Authorization","**************************"); }, contentType: "application/json", data: JSON.stringify([ {"###": value } ]), success: function (response) { //console.log(response.data[0].state); if (response.data[0].state != 0) { js.showErrorMessage("^^^^^^^^^^^^^^^^^^^^^^^^"); } } });