Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AngularJS发送HTTP头请求_Javascript_Angularjs_Http Headers_Httprequest_Http Get - Fatal编程技术网

Javascript 使用AngularJS发送HTTP头请求

Javascript 使用AngularJS发送HTTP头请求,javascript,angularjs,http-headers,httprequest,http-get,Javascript,Angularjs,Http Headers,Httprequest,Http Get,我试图向远程服务器发送HTTP GET请求,并在HTML页面上使用响应。 下面是项目/js/script.js页面 var app = angular.module('app', ['ngResource']); var config = { url:"www.myWebsite.com/discover", headers: { "X-Object-Header" : "123456789 ",

我试图向远程服务器发送HTTP GET请求,并在HTML页面上使用响应。 下面是项目/js/script.js页面

    var app = angular.module('app', ['ngResource']);

    var config = {
        url:"www.myWebsite.com/discover",
        headers:  {
            "X-Object-Header" : "123456789 ",
            "Content-Type": "application/json"
        }
    };
    app.controller('discoverObjectCtrl', ['$scope', '$http', function (scope, http) {
        console.log('Everything Works!');

    http.get("/object", config).success(function (data) {
        scope.object = data;

    });
    console.log(scope.object);
}]);
在我的响应标题中,这是我得到的

远程地址:127.0.0.1:63342

请求URL:localhost:63342/object

请求方法:获取

状态代码:找不到404


请求标题


接受:application/json,text/plain,/

接受编码:gzip、deflate、sdch

接受语言:en US,en;q=0.8

缓存控制:最大年龄=0

连接:保持活动状态

主机:本地主机:63342

Referer:localhost:63342/DemoSP/index.html

用户代理:Mozilla/5.0(Windows NT 6.3;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/36.0.1985.125 Safari/537.36

X-Object-Header:123456789

我想做的是发送带有自定义URL的http请求。 例如,我希望我的控制台标题显示

请求URL:www.myWebsite.com/discover/object

而不是

请求URL:localhost:63342/project/www.myWebsite.com/discover/object


拜托,我需要帮助。谢谢

您应该像这样配置
get

$http.get("www.myWebsite.com/discover/object", {
    headers: {
        "X-Object-Header" : "123456789",
        "Content-Type": "application/json"
    }
}).success(...);
但是您将遇到CORS问题,因为请求的域与当前脚本所在的域不同。您需要在服务器环境中通过启用
www.myWebsite.com
进行查询,或者如果您可以更改
www.myWebsite.com/discover/object
端点,则将其设置为JSONP端点,您可以通过
$http.JSONP
进行查询


另请参见。

您实际上在做的是跨域Ajax调用。您可以选择一些典型的解决方案:

  • ,对AngularJs使用$http.jsonp

  • 服务端代理,避免访问不同的域

  • 使用“访问控制允许来源”标题

    以下是一些可以帮助您的链接:


HttpIntercepter可用于添加公共头和公共参数

在配置中添加以下内容:

$httpProvider.interceptors.push('UtimfHttpIntercepter')

并使用名称创建工厂
UtimfHttpIntercepter

    angular.module('utimf.services', ['ngResource', 'ng.deviceDetector'])
    .factory('UtimfHttpIntercepter', UtimfHttpIntercepter)

    UtimfHttpIntercepter.$inject = ['$q', '$cookieStore', '$location', '$timeout', '$rootScope',  'appConfig', 'Encrypt', 'appText', 'myDevice'];
    function UtimfHttpIntercepter($q, $cookieStore, $location, $timeout, $rootScope, appConfig, Encrypt, appText, myDevice) {
    var authFactory = {};

    var _request = function (config) {
        config.headers = config.headers || {}; // change/add hearders
        config.data = config.data || {}; // change/add post data
        config.params = config.params || {}; //change/add querystring params            

        return config || $q.when(config);
    }

    var _requestError = function (rejection) {
        // handle if there is a request error
        return $q.reject(rejection);
    }

    var _response = function(response){
        // handle your response
        return response || $q.when(response);
    }

    var _responseError = function (rejection) {
        // handle if there is a request error
        return $q.reject(rejection);
    }

    authFactory.request = _request;
    authFactory.requestError = _requestError;
    authFactory.response = _response;
    authFactory.responseError = _responseError;
    return authFactory;
}

感谢Artjom B.的评论。首先,当我将url从
www.myWebsite.com/discover/object
更改为
https://www.myWebsite.com/discover/object
,它解决了我前面提到的一些问题,但状态代码仍然是404
。我用你的代码试着看看它是否能工作,但还是不行。我还希望将根url与路径分开,因为我计划在对服务器的请求中有多个路径。这就是为什么我不想在请求的URL部分包含完整的URL。当您尝试执行请求时,开发人员工具控制台会打印什么?如果显示SerSecurity错误,则需要在交付angular应用程序的应用程序服务器中进行设置。您确定请求指向正确的对象吗?以下是控制台显示的内容
XMLHttpRequest无法加载https://www.myWebsite.com/discover/object. 请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源站“null”。
那么如何设置
访问控制允许源站标题
这只是一个可以在服务器上设置的标题。如果你使用PHP,你可以使用。如果您使用的是apache,那么
mod_headers
可能是一个不错的选择。如果无法在服务器中更改此设置,则必须在
www.myWebsite.com/discover/object
中实现JSONP端点。