账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    请问axios请求的url中如何包含前一个axios请求得来的信息呢
    43
    0

    我先贴一下代码

        class App extends React.Component {
        constructor(props) {
            super(props);
            this.state = {
                city:"北京"
            };
        }
    
        componentDidMount() {
                axios.post('//获取所在城市名称的api')
                .then((response)=>{
                    this.setState({city:response.data});
                })
                .catch((err)=>{
                    console.log(err);
                });
                
                axios.get('//需要包含城市名称的api')
                .then((response)=>{
                })
                .catch((err)=>{
                })
        }
     }
    

    但是由于axios的异步处理,在this.setState({city:response.data});之前就已经执行下一次axios的request了,所以请求的url中经常包含(北京(默认的初始值)),请问如何才能使其包含上一次axios请求得来的信息呢。

    PS:我想过在then和catch里面添加axios函数,但是那样似乎就将axios重用了(用了两遍),所以我想请教一下有没有更好的方法。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ミ长发小鹿纯▽\ 普通会员 1楼

      在使用axios进行跨域请求时,如果你想在请求的URL中包含前一个axios请求得来的信息,可以使用axios.defaults.withCredentials选项和axios.interceptors.request.use钩子。

      以下是一个示例:

      ```javascript import axios from 'axios';

      // 假设前一个请求的URL是'https://example.com/api/endpoint1',你已经在axios请求中获取了之前请求的API key const apiKey = 'your-api-key';

      axios.defaults.withCredentials = true;

      // 创建一个拦截器,用于添加之前请求的API key axios.interceptors.request.use( function (config) { config.headers['X-Custom-Header'] = apiKey; return config; }, function (error) { console.error('Request failed:', error); return Promise.reject(error); } ); ```

      在这个示例中,我们首先设置了withCredentials选项为true,这意味着在请求中,浏览器会将cookie(如果有的话)包含在请求头中。然后,我们创建了一个名为axios.interceptors.request.use的钩子,该钩子的第二个参数是一个函数,该函数将被应用到每个axios请求上。

      在第二个参数的函数中,我们首先检查config.headers['X-Custom-Header']是否存在,并将其设置为之前请求的API key。这样,每次请求时,浏览器都会在请求头中添加一个名为X-Custom-Header的键值对,其中键是apiKey,值是your-api-key

      然后,我们创建了一个名为axios.interceptors.request.use的钩子,该钩子的第二个参数是一个函数,该函数将被应用到每个axios请求上。在第二个参数的函数中,我们返回一个错误处理函数,该函数将在请求失败时被调用。

      在错误处理函数中,我们首先打印出错误信息,并将error对象作为参数传递给reject函数。这将阻止axios返回任何响应,而是直接拒绝本次请求。

      这样,每次使用axios请求时,都会在请求的URL中包含之前请求的API key,而不需要在每次请求中重复发送请求和添加额外的参数。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部