【发布时间】:2020-12-11 16:21:19
【问题描述】:
我几乎尝试了所有方法。我的前端是用 vue js 开发的。后端在 laravel 中。我们已经为另一个我们试图从中获取数据的网站编写了 api。如果直接访问该网站的 URL,它会提供所有数据,但是当我尝试使用 axios 从我的网站访问它时,它会给我这个错误。
Access to XMLHttpRequest at 'https://example.com/api/tickets/fetch_tickets?page=undefined' from origin 'http://localhost:8000' has been blocked by CORS policy: Request header field x-requested-with is not allowed by Access-Control-Allow-Headers in preflight response.
我试图获取数据的网站表单也构建在 laravel 中。我已经创建了中间件并将其应用于 api 路由。我添加了 chrome 扩展程序 Allow Cors,它可以正常工作,但我们不能要求每个客户都使用该扩展程序。
我们从其他可以很好地访问数据的网站访问该 URL。只有 vue js 应用程序会创建这些问题。
Vue 代码
getTickets() {
axios.get( 'example.com/api/tickets/fetch_tickets?page=' + this.pagination.current, {
}).then((response) => {
// console.log(res.data.data)
// this.desserts = res.data.data;
// this.loadingprop = false;
this.desserts = response.data.data;
this.pagination.current = response.data.current_page;
this.pagination.total = response.data.last_page;
console.log(response.data.data);
}).catch((err) => {
this.handleErrors(err.response.data.errors);
})
.then(() => {
this.loading = false;
});
}
其他网站的路线
Route::group(['middleware' => ['api','cors']], function () {
Route::group(['prefix' => 'tickets'], function () {
Route::post('/store_ticket_auth', 'TicketApiController@storeTicketAuth'); //enter ticket auth
Route::get('/fetch_tickets', 'TicketApiController@fetchTickets'); //get all tickets
Route::get('/fetch_replies/{ticket_id}', 'TicketApiController@fetchTicketReplies'); // get all replies by ticket id
Route::post('/send_reply', 'TicketApiController@sendTicketReply'); // Send reply
Route::post('/update_ticket', 'TicketApiController@updateTicketStatus'); // Update Status
});
});
我是否也需要将其添加到我当前的项目中?
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
我认为问题出在客户端,但不知道为什么它不起作用。
我在stackoverflow上尝试了所有答案,但没有任何效果
【问题讨论】:
-
- 在 public/index.php 的顶部添加以下两行: header("Access-Control-Allow-Origin: "); header("Access-Control-Allow-Headers:");
-
我正在使用 laravel
-
- 冒号后面有一个星号,因为它没有在上面的评论中显示
-
- 是的,在 laravel 中去公共文件夹并编辑 index.php 文件并在顶部添加以上两行。就这些
-
好的。我会在哪个项目上添加它?在我访问它的项目上。或数据来自的其他项目?源项目还是目标项目?
标签: laravel api vue.js cors middleware