Javascript 当请求失败时,Jquery不会处理HTTP错误

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

我的问题很简单。我正在开发一个混合的Android应用程序,它通过jQueryAjax发出HTTP请求。 问题是,当我的请求失败时(服务器返回401/403…等等),Jquery只会触发不正确的HTTP404错误

我正在发出HTTP post请求,如下所示:

    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”