JSON 文件中的数据,React 表跨域错误

Posted

技术标签:

【中文标题】JSON 文件中的数据,React 表跨域错误【英文标题】:Data in JSON file, React table cross-origin error 【发布时间】:2020-03-04 12:48:48 【问题描述】:

我遇到了一个我想要了解的跨域错误。我正在尝试将 JSON 文件中的数据传递到我的表组件中。到目前为止,react 会引发跨源错误。请告知我是否错误地提取数据或我做错了什么。

文件Table.js

/**  
*  Table.js 
* Demon
* Description: Table Interface
* Dependencies:  React 
* Modules: NavgiationBar
*/

import React from 'react';
import  data  from "../../data/SampleData.js";
import TableItem from '../TableItem.js'
class Table extends React.Component 
    constructor(props) 
        super(props);
        this.state = 
            jsonData: []
        ;
    

    //getter methods
    parseData() 
        var jsonData = JSON.parse(data);

    

    componentDidMount() 
        this.setState(jsonData: this.parseData())
        console.log(this.state.jsonData);
    

    render() 
        let jsonData = this.parseData();
        let fieldRows = [];
        //loop through the data
        for (let i=0; i<jsonData.length; i++) 
           fieldRows.push(
            <TableItem 
                key=i accountNum=jsonData.MainAcc accountOwnerName=jsonData.MainAccName
                dsmName = jsonData.DSMname salesTotal=jsonData.Sales_2018 
            />
        );
        
        return (
            <div className= "container">
            <section className ='table'>
                <table>
                    <thead>
                            <tr>
                                <th> Account Number</th>
                                <th> Account Owner Name</th>
                                <th> DSM Name</th>
                                <th> 2018 Sales</th>
                            </tr>
                    </thead>
                </table>
                <table>
                    <tbody>
                        <tr> 
                            <li> Hi</li>
                        </tr>
                    </tbody>
                </table>
            </section> 
            </div>

        );
    



export default Table

文件App.js

import React from 'react';
import logo from './logo.svg';
import './App.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import Table from "./components/Table/Table.js";
import NavgiationBar from './components/NavgiationBar';

function App() 
  return (
    <div className="content">
      <NavgiationBar><span> </span></NavgiationBar>
      <h1> hi </h1>
      <Table/>
    </div>

  );


export default App;

我也使用create-react-app 样板来创建类。我还在寻找将类传递给App.js 的示例,其中包含逻辑。

Sample Data 
var data = [
  
    "Segment": "C10 - Commercial-New",
    "MainAcc": "123sdf",
    "MainAccName": "*** house",
    "Telephone": "+999999",
    "E-MailAddress": "#",
    "Address": "120 North AVE",
    "City": "Santa Ana",
    "State": "California",
    "ZipCode": "92705-4415",
    "SalesRep": "Mario",
    "DSMname": "Manuel",
    "Sales_2018": 833.73,
    "Frequency": 4,
    "Avg_Recency": 71
  ,
  
    "Segment": "C10 - Commercial-New",
    "MainAcc": "12367aq",
    "MainAccName": " PAINTING",
    "Telephone": "+1235656",
    "E-MailAddress": "#",
    "Address": "3073 12st ",
    "City": "Salinas",
    "State": "California",
    "ZipCode": "93901",
    "SalesRep": "Killer Galdos",
    "DSMname": "Kim West",
    "Sales_2018": 194.68,
    "Frequency": 2,
    "Avg_Recency": 42
  
];

【问题讨论】:

Stack Overflow 上有数百个关于 CORS 错误的问题。你读过其中的任何一个吗?例如Origin <origin> is not allowed by Access-Control-Allow-Origin? 我真的不知道如何将它们添加到 create-react-app 样板中。此外,如果我不使用逻辑渲染组件,它似乎可以正常工作。我需要添加这个表格组件 【参考方案1】:

当您尝试将数据从不同来源拉到另一个来源时,会发生跨源错误。假设您的数据位于:https://example_data 你把它拉到了:http://display_data

所以 http 和 https 的协议差异是这里的问题。我会建议检查资源是否共享相同的协议。

【讨论】:

大部分情况下,我从样板命令中使用 npm start。我怎么能检查?一切都是本地的。我正在使用localhost:3000 请分享“../../data/SampleData.js”中的内容;可能与数据有关。如果您在本地做所有事情,不知道为什么会获得 CORS。 分享了样本数据【参考方案2】:

我能够确定的最简单的答案是浏览器没有加载示例数据 json 文件,这就是我收到该错误的原因。我必须对数据进行字符串化并将其转换回 json 对象,这很奇怪。

【讨论】:

【参考方案3】:

对于 CORS 问题,您可以执行以下操作:

到目前为止,针对 CORS 问题的最佳且稳定的解决方案是在您的项目 package.json 文件中添加以下标头:

“headers”: 
   “Access-Control-Allow-Origin”: “*”
 ,

它应该修复它!

【讨论】:

我添加了它,但它似乎没有多大作用。我仍然收到错误消息。 那么,您可能需要在后端代码中添加白名单,如下所示:这一切都在您的后端文件下:例如“settings.py;”在python中。您尝试连接到数据库的位置。CORS_ORIGIN_ALLOW_ALL = True CORS_ORIGIN_WHITELIST = ('localhost:8000',) MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware',] CORSANYWHERE_WHITELIST='localhost:8000' 下面的代码位于您的前端 package.json 文件作为标题。“headers”:“Access-Control-Allow-Origin”:“*”,

以上是关于JSON 文件中的数据,React 表跨域错误的主要内容,如果未能解决你的问题,请参考以下文章

如何从 React 中的 JSON 文件导入数据?

React 和 Express 阻止了跨域请求

从 Javascript 中的 url 获取 JSON 文件,React Native

ajax跨域访问python,返回json数据拿不出来

不能在过程 Netezza 中删除表跨数据库

无法在 React.js 中读取 json,出现意外的令牌错误