首页 > 解决方案 > AXIOS POST 的奇怪行为

问题描述

我有一个简单的功能可以在我的应用程序上进行测试:

        this.$userService.getRestaurantsList(userTemp).then(
            response => {
                console.log(response);
                console.log('FUNCIONOU');
            }
        );

因为我在发布这个简单的帖子时遇到了错误,并且给了我这个:

Access-Control-Allow-Headers 在预检响应中不允许请求标头字段内容类型。

这不是 CORS,我的服务器使用 CORS 配置得很好。

当我们深入了解 getRestaurantsList 方法时,我有这个:

getRestaurantsList(user) {
     return axios.post(configMain.MAIN_URL + this.GET_COMPANY_RESTAURANT_LIST_URL, JSON.stringify(user));
}

我想用 AXIOS 发送像 RAW 数据这样的数据,但是如果我使用 stringify 它可以在帖子中工作,但是如果我像这样使用

getRestaurantsList(user) {
     return axios.post(configMain.MAIN_URL + this.GET_COMPANY_RESTAURANT_LIST_URL, user);
}

只有 JSON 数据它给了我你上面看到的错误,并且在我的 API 中只是返回数据进行测试:

这是来自 LARAVEL API

public function getAllRestaurants2(Request $request)
{
    return $this->sendResponse($request->all(), 'Restaurants retrieved successfully');       
}

一些更新我正在做的事情,如果我这样发送的话:

return axios.post(configMain.MAIN_URL + this.GET_COMPANY_RESTAURANT_LIST_URL, null, {
    params: {
        search: user
    }
});

只有这种方法不起作用:

return axios.post(configMain.MAIN_URL + this.GET_COMPANY_RESTAURANT_LIST_URL, user);

这是我的拦截器使用 STRINGFY 并且工作正常日志:

{
  "url": "url",
  "method": "post",
  "data": "{\"loja\":\"teste\"}",
  "headers": {
    "Accept": "application/json, text/plain, */*",
    "Content-Type": "application/x-www-form-urlencoded"
  },
  "transformRequest": [
    null
  ],
  "transformResponse": [
    null
  ],
  "timeout": 0,
  "xsrfCookieName": "XSRF-TOKEN",
  "xsrfHeaderName": "X-XSRF-TOKEN",
  "maxContentLength": -1,
  "maxBodyLength": -1
}

现在拦截器使用了错误的方法:

{
  "url": "url",
  "method": "post",
  "data": "{\"id\":\"\",\"name\":\"Anderson Teste\",\"email\":\"teste@email\",\"client_restaurant_id\":11,\"company_id\":1,\"cpf\":\"\",\"phone\":\"81293932921393\",\"locations\":[],\"password\":\"123mudar\"}",
  "headers": {
    "Accept": "application/json, text/plain, */*",
    "Content-Type": "application/json;charset=utf-8"
  },
  "transformRequest": [
    null
  ],
  "transformResponse": [
    null
  ],
  "timeout": 0,
  "xsrfCookieName": "XSRF-TOKEN",
  "xsrfHeaderName": "X-XSRF-TOKEN",
  "maxContentLength": -1,
  "maxBodyLength": -1
}

这是我在 CORS 包中的配置:

[
    'paths' => ['project/api/*'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['*'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => false,
];

我做错了什么,像 JSON 数据格式一样发布给我错误?

标签: javascriptphplaravelaxios

解决方案


您需要使 getRestaurantsList 函数异步。试试这个代码。

getRestaurantsList(user) async {
     return await axios.post(configMain.MAIN_URL + this.GET_COMPANY_RESTAURANT_LIST_URL, user);
}

推荐阅读