Javascript 使用AngularJS发送HTTP头请求
我试图向远程服务器发送HTTP GET请求,并在HTML页面上使用响应。 下面是项目/js/script.js页面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 ",
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
- 服务端代理,避免访问不同的域
- 使用“访问控制允许来源”标题 以下是一些可以帮助您的链接:
$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端点。