18

我正在尝试使用颤振网络。我尝试使用 http 包将我创建的一个简单的 Flutter Web 应用程序连接到 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;

}
4

3 回答 3

7

您还可以将以下代码添加到您的 php 文件中,如下所示:

<?php
require('connection.php');
header("Access-Control-Allow-Origin: *");
....
code goes here
....
?>

我在 LocalHost 上试过这个,它奏效了。

注意:如果您使用的是 nodejs,请安装 cors() 包并使用类似

var express = require('express')
var app = express()
var cors = require('cors')

app.use(cors())

查看npmjs 上的 CORS 包

于 2019-11-10T22:13:58.850 回答
3

我真的只是自己偶然发现了这个错误。您正在与 CORS 发生冲突……如果您跟踪底层网络流量,您应该会看到它首先发送了一个OPTIONS请求。

要让它暂时“工作”,您可以在关闭 CORS 的情况下启动 Chrome。显然,这不是一个长期的解决方案,但它应该能让你继续前进。您需要的命令是:

open /Applications/Google\ Chrome.app --args --disable-web-security --user-data-dir
于 2019-05-15T09:20:50.057 回答
1

我发现并解决了这个问题是

要访问由颤振制作的网站,基本上您正在调用 JS 脚本

对于任何可以访问脚本的网站(在我的情况下,这是我从中访问 api 的另一个网站),您需要提供某种许可才能访问

在这种情况下是CORS - 跨域资源共享

将以下代码添加到您的网站.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 请求

于 2020-01-01T11:24:09.257 回答