json.parse 触发 React / MERN 中的跨域错误

Posted

技术标签:

【中文标题】json.parse 触发 React / MERN 中的跨域错误【英文标题】:json.parse triggers cross-origin error in React / MERN 【发布时间】:2020-01-31 07:30:43 【问题描述】:

我有一个数据结构,当我 console.log 它时,它工作得很好:

console.log(JSON.parse([values.category2]).needed_skills);

但是当我将JSON.parse([values.category2]).needed_skills 的结果传递给我的应用程序中的一个组件时,整个事情会因跨域错误而崩溃。

我不明白为什么,因为我对来自 API 的所有数据启用了 CORS,您甚至可以在请求标头中看到它:

这是 UI 组件(当我将它映射到 JSON.parse([values.category2]).needed_skills 的结果时)只是因跨域错误而崩溃。:


    if(values) 
    return values.skills_required.map((skill, idx) => 
      return (
        <div className="input-group">
            <select 
                  onChange=e => updateSkill(e, idx) 
                  type="text"
                  className="form-control">
                  <option>Select an option...</option>


            JSON.parse([values.category2]).needed_skills && JSON.parse([values.category2]).needed_skills.map((q, w) => 
            console.log(JSON.stringify(q));
            console.log(w)
                  return(
                              <option 
                                key=w
                                value=JSON.stringify(q)>
                                 JSON.stringify(q)

                                </option> 

                              ))


               </select>
              <div className="input-group-append">
                  <button 
                        className="btn btn-outline-danger mb-3" 
                        type="button" 
                        id="button-addon2" 
                        onClick=() => removeSkill(idx)>x
                   </button>
              </div>
        </div>
      );
    );
    ;
  ;

真正让我困惑的部分是我可以在应用程序的其他部分操作完全相同的结果数据对象,甚至不需要JSON.parse 结果,但是问题似乎是数据表示本身的一个潜在问题.

console.log(values.category2.needed_skills); 返回undefined

console.log(JSON.parse([values.category2]).needed_skills) 准确返回我需要在上面的 UI 组件中映射的内容 - 但是由于某种原因,当我在 UI 组件中进行 JSON.parse 时它崩溃了,并且当我 调用 JSON 时。在 UI 中解析,一切都很好(除了我无法映射数组):

【问题讨论】:

【参考方案1】:

要使 JSON.parse 正常工作,您必须将其包装在 try-catch 块中。

在你的情况下是:

if(values) 
let category2 = [];
try 
    category2 = JSON.parse([values.category2]);
 catch(e) console.log(e)
return values.skills_required.map((skill, idx) => 
  return (
    <div className="input-group">
        <select 
              onChange=e => updateSkill(e, idx) 
              type="text"
              className="form-control">
              <option>Select an option...</option>


        category2.needed_skills && category2.needed_skills.map(...)
    ...
  );
);

【讨论】:

您能解释一下为什么您认为这是一个可以接受的解决方案吗?

以上是关于json.parse 触发 React / MERN 中的跨域错误的主要内容,如果未能解决你的问题,请参考以下文章

SyntaxError:JSON.parse:React 应用程序上 JSON 数据的第 1 行第 1 列的意外字符

如何 JSON.parse Zapier 触发器中的数组?

react-apollo 错误:[网络错误]:ServerParseError:JSON.parse:JSON 数据第 1 行第 1 列的意外字符

React JS:this.setState 和 JSON.parse

react-native 捆绑失败:错误:找不到模块 /metro-react-native-babel-transformer/src/index.js

React native http post got Json Parse error: Unrecognized token '<'