Angular $ http.get到localhost,总是在浏览器中返回404. 200

时间:2014-03-03 13:30:17

标签: json angularjs angular-http

我无法在Angular 1.2.13中创建成功的获取请求。

  var getProgress = function() {
      var promise = $http({method: 'GET', url: 'http://localhost:8080/project/local/some/getStatus'});

      promise.then(function(success) {
        alert(JSON.stringify(success));
      }, function(error) {
        alert(JSON.stringify(error));
      }, function(notify) {
        alert(JSON.stringify(notify));
      });
  };    

所以我试图从我的REST Web服务接收一些JSON。为了测试该服务,我从浏览器(IE9,Firefox 27,Chrome 33)访问它可以在所有这些服务中正常工作。

上面的代码使用angular但总是提示我错误:

* { “数据”: “”, “状态”:404, “配置”:{ “transformRequest”:[空], “transformResponse”:[空], “方法”: “GET”, “URL” :"http://localhost:8080/project/local/some/getStatus",“标题”:{“接受”:“application / json,text / plain, / ”}}} * *

使用 wireshark 我检查HTTP请求和HTTP响应,从浏览器和角度返回200 调用Web服务,以及所需的json对象!然而,角度提示我404.

当我从Firefox使用ANGULAR发出get请求并使用Findbugs进行调试时,在控制台中我获得了HTTP Code 200,然而Angular说404.尝试调整角度的代码无济于事,看不出有什么奇怪的。

以上代码在IE9中正常运行!

任何建议都表示赞赏。

4 个答案:

答案 0 :(得分:3)

@GeoffGenz&& @BKM是对的。 CORS是罪魁祸首。我想有几种解决问题的方法。

  1. 在开发过程中,不要通过从文件加载页面来调试页面,而是在Web服务器内部署它,然后使用firebugs从那里进行调试。这是我的情况。我正在从file:/// ......加载网页,我正在向http:// localhost发出请求...因为协议不同(文件与http),请求有所不同起源,如https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript中所述。一旦部署在JBoss中,一切正常。
  2. 第二个解决方案,我还没有尝试过使用 JSONP Angular
  3. 最后一个是创建一个ContainerResponseFilter来改变标题?
  4. @Provider
    public class RespFilter implements ContainerResponseFilter {
        @Override
        public void filter(ContainerRequestContext reqContext, ContainerResponseContext respContext) throws IOException {
            respContext.getHeaders().putSingle("Access-Control-Allow-Origin", "*");
        }
    }
    

答案 1 :(得分:0)

我遇到了同样的问题。但原因只是我向控制器添加了 EnableCors 属性,但我忘了在 WebAPI 配置中启用 CORS

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.EnableCors();            
        ....
    }
}

答案 2 :(得分:0)

这也可以使用IE解决,IE从不使用本地html文件之前的文件:\。使用file:\\的原因不适用于http请求已在上面的答案中解释过。

答案 3 :(得分:-2)

试试这个:

$http({method: 'GET', url: 'http://localhost:8080/project/local/some/getStatus'}).
    success(function(data, status, headers, config) {
       alert(JSON.stringify(data));
    }).
    error(function(data, status, headers, config) {
      alert(JSON.stringify(data));
    });