フラッターウェブを試してみました。作成したシンプルなフラッターWebアプリを、httpパッケージを使用してmysqlデータベースとlocalhostに接続しようとしました。ただし、リクエストメソッドからデータが返されません。 _snaphot.error
_を印刷しようとすると、_XMLHttpRequest error
_になります。このメソッドはFutureBuilder()
にあります
_getMethod()async{
String theUrl = 'https://localhost/fetchData.php';
var res = await http.get(Uri.encodeFull(theUrl),headers: {"Accept":"application/json"});
var responsBody = json.decode(res.body);
print(responsBody);
return responsBody;
}
_
私は文字通り自分でエラーを見つけました。 CORSの危険にさらされています...基になるネットワークトラフィックをトレースすると、最初にOPTIONS
リクエストを送信することがわかります。
一時的に「機能」させるには、CORSをオフにしてChrome=を起動します。明らかに、これは長期的な解決策ではありませんが、うまくいくはずです。必要なコマンドは次のとおりです。
open /Applications/Google\ Chrome.app --args --disable-web-security --user-data-dir
次のコードを次のようにphpファイルに追加することもできます。
<?php
require('connection.php');
header("Access-Control-Allow-Origin: *");
....
code goes here
....
?>
私はこれをLocalHostで試してみましたが、うまくいきました
私が見つけて問題を解決したのは
Flutterで作成されたWebサイトにアクセスするには、基本的にJSスクリプトを呼び出します
スクリプトへのアクセスを許可するWebサイト(私の場合、私はからAPIにアクセスしていた別のWebサイトでした)には、アクセスするための何らかの許可を与える必要があります。
この場合はCORS-クロスオリジンリソースシェアリングです。
以下のコードをWebサイトに追加します.htaccess
ファイル
<ifModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www.)?(localhost:55538|somedomain.com)$" AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header always set Access-Control-Allow-Methods: "GET,POST,PUT,DELETE,OPTIONS"
</ifModule>
これを追加APIへのリクエストをヒットするためにフラッターWebサイトへのアクセスを許可します