当前位置: 首页 > 知识库问答 >
问题:

使用AngularJS发送HTTP头请求

朱俭
2023-03-14

我试图向远程服务器发送HTTP GET请求,并在HTML页面上使用响应。下面是project/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未找到

请求头

接受:申请/json,文本/平原,/

接受编码:gzip、deflate、sdch

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

缓存控制:最大年龄=0

连接:保持活力

主机:本地主机:63342

Referer:localhost:63342/DemoSP/index.html

User-Agent: Mozilla/5.0(Windows NT 6.3; WOW64)AppleWebKit/537.36(KHTML, like Gecko)Chrome/36.0.1985.125Safari /537.36

X-Object-Header:123456789

我想做的是发送带有自定义URL的超文本传输协议请求。例如,我希望我的控制台头显示

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

而不是

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

拜托,我需要帮助。谢啦

共有3个答案

邵昆琦
2023-03-14

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;
}

邢博文
2023-03-14

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

>

  • JSONP,对AngularJs使用$http.jsonp

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

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

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

    AngulaJS jsonp

    带角度JS的跨源$http

  • 周阳波
    2023-03-14

    您应该如下配置get

    $http.get("www.myWebsite.com/discover/object", {
        headers: {
            "X-Object-Header" : "123456789",
            "Content-Type": "application/json"
        }
    }).success(...);
    

    但是您将遇到CORS问题,因为请求的域与当前脚本所在的域不同。您需要在服务器环境中通过Access Control Allow Origin头启用www.myWebsite.com查询,或者如果您可以更改www.myWebsite.com/discover/objectendpoint,则将其设为JSONPendpoint,您可以通过$http.JSONP进行查询。

    请参见此答案。

     类似资料:
    • 我正试图使用Guzzle6 http客户端发送一个post请求。我发送了两个请求,一个内容类型为(Guzzle),另一个为(Guzzle)。 我将客户机初始化如下(分别为和): 我收到的响应没有相同的数据/正文: :的输出 但是为什么我首先问这个问题是因为我面临签名不匹配的问题。 当我发送请求时,我添加了一个带有签名的头,签名是。因此,当以和的形式发送数据时,我得到了不同的签名(因为在的情况下,接

    • 问题内容: 我一直在尝试从SO和其他站点上的大量示例中学习,但是我无法弄清楚为什么我一起学习的示例无法正常工作。我正在构建一个小型的概念验证应用程序,该应用程序可以识别语音并将其(文本)作为POST请求发送到node.js服务器。我确认了语音识别功能,并且服务器正在通过常规浏览器访问获得连接,因此我被认为是问题出在应用程序本身。我想念一些小而愚蠢的东西吗?没有引发任何错误,但是服务器从不识别连接。

    • 问题内容: 我需要使用该服务发送GET请求。参数之一是ID数组。网址看起来像这样一个 **mysite.com/items?id[]=1 &id[]=2&id[]=3&id[]=4** 我尝试过这种方法 但网址是 **mysite.com/items?id=%5B%221%22%2C%222%22%2C%223%22%2C%224%22%5D** 那是因为Angular正在将我的值转换为JSON字

    • 很多时候我们需要在页面打开的时候,读取远程的内容,然后在当前页面显示. 这就需要用到 http请求了. vue页面调用http请求 vuejs 内置了对发送http请求的支持. 只需要在对应页面的script 标签内加上对应的代码就好. 例如: 我们新增一个页面,叫 "博客列表页" : src/components/BlogList.vue, 内容如下: <template> <div >

    • 问题内容: Express.JS提供了一些静态页面。设置很简单: 我希望响应包含一个附加的http标头( Access-Control-Allow-Origin:* )。应该放在哪里?我尝试了以下示例,但是标题仅出现在默认页面上: 谢谢。 问题答案: 我尝试了以下示例,但标题仅出现在默认页面上 是的,这是因为您仅为路由而不是其他路径定义了它。您应该改为使用中间件。 如果您希望为所有请求设置标题:

    • 问题内容: 我正在开发使用不同服务其余部分的图形界面(用Java编写)。我必须调用这样的服务: 呼叫服务: 当我从Angularjs服务文件中请求时,如果服务具有Content-Type = multipart / form- data,则会收到错误400(错误请求) 如果服务的Content-Type =“ application / x-www-form-urlencoded; charset