【问题标题】:Trouble loading json file to html using svelte使用 svelte 将 json 文件加载到 html 时遇到问题
【发布时间】:2020-08-14 07:06:40
【问题描述】:

我是苗条的新手,我必须将它用于我的实习生工作。

我有我的本地 json 文件并尝试将其转换为我的 HTML。我一直在到处寻找,但没有得到答案。

我尝试过这样做:

cat.svelte:

<script>
import {onMount} from "svelte";

let data = [];

onMount(async ()=>{
    const response = await fetch("./table_schema_name.json");
    data = await response.json();
    console.log(data)

});

</script>
<p>displa</p>
{#each data as item}
<div>
    <p>{item.table_name}</p>
    <p>display</p>
</div>
{/each}

我的 JSON 文件如下所示:

table_schema_name.json

[
    {"table_schema": "a", "table_name": "a1"},
    {"table_schema": "a", "table_name": "a2"},
    {"table_schema": "a", "table_name": "a3"}, 
    {"table_schema": "b", "table_name": "b1"},
     {"table_schema": "b", "table_name": "b2"}
]

我从控制台得到的错误。

cat.svelte:7 GET http://localhost:3000/table_schema_name.json 404 (Not Found)
cat.svelte:9 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

非常感谢。真的需要用 SVELTE 糟糕地在 HTML 中显示 json 文件!

【问题讨论】:

  • 试过这个。但不工作。在执行 @NikitaMadeev 时遇到了另一个错误
  • 您的 json 文件在您的服务器上可用吗? (是否在公用文件夹中)因为它试图从中获取它
  • 如果您只是将浏览器指向http://localhost:3000/table_schema_name.json,它会显示吗?这看起来更像是您的服务器的问题,而不是 svelte 本身的问题
  • 我正在为您的代码创建一个代码框 (codesandbox.io/s/strange-yonath-j37v2?file=/App.svelte)。您作为示例提供的 JSON 似乎不正确。因此,如果您收到 404 错误,则问题不应该来自 Svelte,而是来自到达 table_schema_name.json 所需的路径

标签: html json svelte


【解决方案1】:

如果您提供 json,我建议您像这样在本地导入它:

<script>
  import data from "./path/to/table_schema_name.json";
</script>

{#each data as item}
<div>
    <p>{item.table_name}</p>
    <p>display</p>
</div>
{/each}

捆绑器将直接将其注入生成的代码中,因此服务器不会出现问题;)

【讨论】:

  • 如果我这样做,错误是:'table_schema_name.json' 由 src\routes\catalog.svelte 导入,但无法解析 - 将其视为服务器的外部依赖项,并且客户端。在服务工作者上:internal/modules/cjs/loader.js:969 throw err; ^ 错误:找不到模块 'table_schema_name.json' 需要堆栈:- C:\Users\t_binta\Desktop\ICM\portal__sapper__\dev\server\server.js
  • @skylight 你确定你用正确的路径导入它吗?这是一个codesandbox,使用正确的路径完全可以正常工作。请详细提供项目的结构以及您如何尝试导入.json
  • 显然,我的 json 不在服务器中。我试图放入我在托管我的 json 文件以获取 url 时遇到问题的服务器
  • 如果你让它在本地工作,那么服务器就不会有问题(捆绑程序将直接在生成的.min.js 文件中注入json)。那么,如果你在本地尝试这种方式,你会得到什么?
【解决方案2】:

在网上彻底搜索后,我自己解决了。

基本上,我将 table_schema_name.json 移至静态文件夹。通过将其移动到静态文件夹,我可以通过 URL 访问 JSON 文件。

所以我将代码更改为:

onMount(async ()=>{
    const response = await fetch("./table_schema_name.json");
    data = await response.json();
    console.log(data)

});

收件人:

import { onMount } from 'svelte';

let data = [];

onMount(async () => {
    const res = await fetch('http://localhost:3000/api/table_schema_name.json');
    data = await res.json();
});

我希望我早点发现这个问题,因为我已经浪费了几个小时来解决这个问题。希望我的回答能帮助和我遇到同样问题的人。

【讨论】:

  • 仍然不是一个好主意:/ 如果可以直接导入,为什么要进行本地提取?它为您节省了异步调用。
  • 目前,我正在使用本地文件进行开发。但在后面的部分,我需要从 AWS 获取数据
  • 为什么不早点告诉这部分?
猜你喜欢
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多