我遇到了CORS XMLHttpRequest错误
访问位于"的XMLHttpRequesthttps://maps.googleapis.com/maps/api/place/autocomplete/json?params'来自原点'http://localhost:49234'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在"access control Allow Origin"标头。
这是我的代码
///get information of a place after getting its place ID from places autocomplete
Future<Place?> getPlaceDetails(String placeID, String sessionToken,
[Locale? locale]) async {
try {
var dio = Dio();
dio.options.headers = AppValues.headers;
dio.options.responseType = ResponseType.plain;
var response = await dio.get(detailsUrl(placeID, sessionToken, locale));
var json = convert.jsonDecode(response.data.toString());
var jsonResult = json[_f.result] as Map<String, dynamic>;
return Place.fromMap(jsonResult);
} catch (e) {
return null;
}
}
我读到了这个问题的答案,说必须在响应标头中添加"Access Control Allow Origin",而不是在请求标头中添加,我相信我正在做这件事。我已经有这个错误好几天了,需要一个永久的解决方案。我读过一些临时解决方案的答案,比如安装插件或禁用网络安全。但需要一个在我部署时可以工作的解决方案。无论是添加响应头(以及如何添加(,还是其他任何一个。请提供帮助,并衷心感谢您花时间提供任何帮助,我们深表感谢。
这是控制台中的错误日志
errors.dart:202 Uncaught (in promise) Error: DioError [DioErrorType.response]: XMLHttpRequest error.
Source stack:
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 926:28 get current
packages/dio/src/dio_mixin.dart 473:35 fetch
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5 _async
packages/dio/src/dio_mixin.dart 472:31 fetch
packages/dio/src/dio_mixin.dart 468:12 request
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5 _async
packages/dio/src/dio_mixin.dart 438:33 request
packages/dio/src/dio_mixin.dart 55:12 get
packages/app/services/places_service.dart 35:29 getAutoComplete
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5 _async
packages/app/services/places_service.dart 27:45 getAutoComplete
packages/app/blocs/map_bloc.dart 39:57 searchPlaces
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5 _async
packages/app/blocs/map_bloc.dart 38:31 searchPlaces
packages/app/custom/search_map.dart 132:36 onChanged
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5 _async
packages/app/custom/search_map.dart 130:14 onChanged
packages/flutter/src/material/text_form_field.dart 198:25 onChangedHandler
packages/flutter/src/widgets/editable_text.dart 2552:27 [_formatAndSetValue]
packages/flutter/src/widgets/editable_text.dart 1917:7 updateEditingValue
packages/flutter/src/services/text_input.dart 1596:9 _handleTextInputInvocation
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5 _async
packages/flutter/src/services/text_input.dart 1538:45 [_handleTextInputInvocation]
packages/flutter/src/services/platform_channel.dart 414:55 _handleAsMethodCall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5 _async
packages/flutter/src/services/platform_channel.dart 411:40 [_handleAsMethodCall]
packages/flutter/src/services/platform_channel.dart 407:34 <fn>
packages/flutter/src/services/binding.dart 377:35 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5 _async
packages/flutter/src/services/binding.dart 374:98 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 1042:13 invoke2
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/ui/channel_buffers.dart 25:12 invoke
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/ui/channel_buffers.dart 65:7 push
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/ui/channel_buffers.dart 130:16 push
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 304:25 invokeOnPlatformMessage
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/text_editing/text_editing.dart 1711:39 updateEditingState
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/text_editing/text_editing.dart 1817:17 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/text_editing/text_editing.dart 1017:7 handleChange
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 334:14 _checkAndCall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 339:39 dcall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/html/dart2js/html_dart2js.dart 37277:58 <fn>
at Object.throw_ [as throw] (errors.dart:251)
at dio_mixin.dart:628
at _RootZone.runBinary (zone.dart:1690)
at _FutureListener.catchError.handleError (future_impl.dart:174)
at handleError (future_impl.dart:778)
at Function._propagateToListeners (future_impl.dart:799)
at _Future.new.[_completeError] (future_impl.dart:609)
at _SyncCompleter.new.[_completeError] (future_impl.dart:60)
at _SyncCompleter.new.completeError (future_impl.dart:32)
at onError (future.dart:544)
at _RootZone.runBinary (zone.dart:1690)
at _FutureListener.then.handleError (future_impl.dart:174)
at handleError (future_impl.dart:778)
at Function._propagateToListeners (future_impl.dart:799)
at _Future.new.[_completeError] (future_impl.dart:609)
at async._AsyncCallbackEntry.new.callback (future_impl.dart:665)
at Object._microtaskLoop (schedule_microtask.dart:40)
at _startMicrotaskLoop (schedule_microtask.dart:49)
at async_patch.dart:166
CORS XMLHttpRequest error
是服务器端错误。它与你的应用程序无关。在使用移动应用程序时,你不会面临任何类似的问题,但在flutter网络中,这很常见。你能做什么?-只需让您的服务器端人员或api开发人员启用他/她的项目CORS
策略即可。几周前,我遇到了同样的问题,我问服务器人员,然后他从那里启用了CORS
,但我仍然面临异常,然后我问api开发人员,他从他的django应用程序中启用了它,flutter web 也没有异常
错误是因为我使用的Maps-Api不是从客户端代码而是服务器端调用的。因此,解决方案是制作一个云函数,该函数发出请求并返回数据
import axios from "axios";
export const serverRequest = functions.https.onCall(async (url, context)=> {
isAuthenticatedAdmin(context);
const response = await axios.get(url as string).then(({data})=> data);
return response;
});