首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VueJs Axios -请求头

VueJs Axios -请求头
EN

Stack Overflow用户
提问于 2018-07-27 10:03:22
回答 2查看 6.7K关注 0票数 0

编辑:这可能是CORS的问题,我在本地主机上.

在Javascript中,我可以设置请求头,获取并返回如下响应:

代码语言:javascript
复制
    $(function() {
    var params = {
        // Request parameters
    };

    $.ajax({
        url: "https://demo-api.com/",
        beforeSend: function(xhrObj){
            // Request headers
            xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{API KEY}");
        },
        type: "GET",
        // Request body
        data: "{body}",
    })
    .done(function(data) {
        alert("success");
    })
    .fail(function() {
        alert("error");
    });
});

问题:

我想学习VueJs,并希望用VueJs + Axios来复制它,但是对于如何像上面的JS一样设置请求头,我感到很困惑。

这里是我失败的尝试:

代码语言:javascript
复制
    new Vue({
      el: '#app',
      data () {
        return {
          info: null,
          loading: true,
          errored: false,
          response: false
        }
      },
      mounted () {
          axios({
              method: 'get',
              url: 'https://demo-api.com/',
              headers: { 
                'Ocp-Apim-Subscription-Key': 'API KEY',
              } 
            })
            .then(response => {
              console.log(response)
              this.response = true
            })
            .catch(error => {
              console.log(error)
              this.errored = true
            })
            .finally(() => this.loading = false)
        }
    })

如何像在上面的JS中那样,具体地设置请求头。我想学习如何在Vue/Axios中实现以下内容。

代码语言:javascript
复制
 xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{API KEY}");

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-07-27 10:21:39

Vue.js中创建的和挂载的事件之间的区别

阅读答案,尝试使用created()生命周期挂钩而不是mounted()

此外,您可以使用此头创建axios的单独实例,然后在您的代码中使用它:

代码语言:javascript
复制
axios-demo-api.js

import axios from 'axios'

const instance = axios.create({
    baseURL: 'https://demo-api.com',
    headers: {'Ocp-Apim-Subscription-Key': 'API KEY'} //don't forget to change API key to your exact key
})

export default instance

用法:

代码语言:javascript
复制
import axiosInstance from 'axios-demo-api';


export default {

 created() {
  axiosInstance.get('/{demoId}?' + $.param(params))
                .then(response => {
              console.log(response)
              this.response = true
            })
            .catch(error => {
              console.log(error)
              this.errored = true
            })
            .finally(() => this.loading = false)
 }
}
票数 1
EN

Stack Overflow用户

发布于 2018-07-27 10:27:51

你的问题不在于标题。你正在正确地设置它。这与URL有关。您正在像这样构造您的URL:

代码语言:javascript
复制
url: 'https://demo-api.com/{demoId}?" + $.param(params)',

您的URL字符串是错误的。它有一个额外的报价在结尾。这就是你有404错误的原因。这就是你需要做的:

代码语言:javascript
复制
url: "https://demo-api.com/{demoId}?" + $.param(params),

另外,如果您使用的是Vue而不是jQuery,那么就不应该使用$.param函数。相反,使用适当的查询字符串模块(如qs )。所以您的实际URL应该是:

代码语言:javascript
复制
url: `https://demo-api.com/${demoId}?${qs.stringify(params)}`,

这里我们使用ES2015字符串插值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51555565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档