Javascript 当请求失败时,Jquery不会处理HTTP错误
我的问题很简单。我正在开发一个混合的Android应用程序,它通过jQueryAjax发出HTTP请求。 问题是,当我的请求失败时(服务器返回401/403…等等),Jquery只会触发不正确的HTTP404错误 我正在发出HTTP post请求,如下所示:Javascript 当请求失败时,Jquery不会处理HTTP错误,javascript,android,jquery,ajax,hybrid-mobile-app,Javascript,Android,Jquery,Ajax,Hybrid Mobile App,我的问题很简单。我正在开发一个混合的Android应用程序,它通过jQueryAjax发出HTTP请求。 问题是,当我的请求失败时(服务器返回401/403…等等),Jquery只会触发不正确的HTTP404错误 我正在发出HTTP post请求,如下所示: var request = $.ajax({ url: url, type: 'POST', dataType: 'json', data: obj, cache: false, co
var request = $.ajax({
url: url,
type: 'POST',
dataType: 'json',
data: obj,
cache: false,
contentType : 'application/json',
beforeSend : function(xhr) {
xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ":" + password));
},
success: function(data){
// Success
},
error: function(request, status, errorThrown){
console.log("call Login ajax failed with error, status:" + status + " errorThrown:" + errorThrown);
console.log("call Login ajax failed with errorCode : " + request.status);
}
奇怪的是,当我在PC的浏览器中以DynamicWeb项目的形式运行我的项目,并在url使用我的ip地址时,jquery会触发正确的错误事件,但当我在url中使用“localhost”时,jquery就像在安卓设备中一样,只会触发404事件。
我试图将jquery库更改为最新版本2.1.1,但这没有帮助。
另外,我正在使用jquery 2.0.2…您需要将响应的标题设置为内容类型:application/json 在回显json之前。或者您可以将ajax调用的类型设置为文本html 此外,建议使用jquery链接回调函数,如下所示
$.ajax({
url: url,
headers: { "Accept-Encoding" : "gzip" }, // Use the response seen in sniffer
type: 'POST',
dataType: 'json',//be sure you are receiving a valid json response or you'll get an error
})
.done(function(response) {
console.log("success");
console.log(response);
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
我的问题是服务器不允许跨域请求。所以我必须在服务器的响应中设置“Access Control Allow Origin:”、“*”头,一切都会正常的 我在logCat中看到Android设备触发了这个:XMLHttpRequest无法加载url。访问控制允许原点不允许原点为null。我认为跨域请求存在问题。我检查客户机是否设置了Origin:null头,无论我是否在Ajax中设置了Origin标记。主要的任务是在Jboss的容器级别设置AllowOrigin头。我已经创建了一个筛选器,但它只在应用程序级别执行,目标是在jboss级别创建筛选器,并在所有响应中设置Allow Origin标头…主要目的是让jboss在HTTP响应的标头中设置Access Control Allow Origin',“*”…我使用jboss筛选器捕获客户端的请求并设置标头,但是我的过滤器无法捕获jboss容器级别的请求,只能捕获应用程序级别的请求……请将数据类型:“json”更改为数据类型:“jsonp”