V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
pcxys
V2EX  ›  JavaScript

Unexpected end of input 错误,求教

  •  
  •   pcxys · 56 天前 · 1710 次点击
    这是一个创建于 56 天前的主题,其中的信息可能已经有所发展或是发生改变。

    求教各位大佬,这个问题是咋回事,google 上找了一天,也没有找到好的办法。 e55ffb2a28c75f4600df75f9b3f3ae35.png b91a381b833095e96166df68644bebeb.png 41dcfa90fde5947afee578cd350731cb.png

    26 条回复    2024-10-27 11:12:01 +08:00
    apples01
        1
    apples01  
       56 天前
    看不到图
    Opportunity
        2
    Opportunity  
       56 天前
    说明没获取到正确的 JSON 文件,看 Network
    NessajCN
        3
    NessajCN  
       56 天前 via Android
    你为啥会去用 HTTP GET 请求一个本地 json 文件?
    你知道 fetch 是用来干嘛的吗
    humbass
        4
    humbass  
       56 天前
    直接在浏览器访问 http://your-hostname/constant/ceshi.json 有返回的话,fetch 也能得到数据,否则就不对
    pcxys
        5
    pcxys  
    OP
       56 天前
    @Opportunity
    网络里面有这个文件,状态是 200
    pcxys
        6
    pcxys  
    OP
       56 天前
    @NessajCN
    那我应该用什么方法读取本地的 json 文件呢?
    有没有什么函数之类的?
    pcxys
        7
    pcxys  
    OP
       56 天前
    @humbass
    我现在是在本地测试的,所以可能不能用网址去访问。
    如果是用本地地址去访问的话,没问题。
    lisongeee
        8
    lisongeee  
       56 天前
    需要展示完整的 html 文件才知道,截图里不完整

    比如控制台错误里的 15 行 30 列到底对应代码的哪位置?
    pcxys
        9
    pcxys  
    OP
       56 天前
    @lisongeee
    “.then((response) => response.json())”这个是第 15 行。
    humbass
        10
    humbass  
       56 天前
    @pcxys fetch 基于浏览器的,必须是 http(s),不支持本地,不知道吗?初学者?

    当然 node.js 也有 fetch ,那个可以直接读取
    lisongeee
        11
    lisongeee  
       56 天前
    测试了一下,确实出现了这个错误

    因为你设置了 mode: 'no-cors', 导致拿到的 content 是 '' 空字符串,所以发生 json 解码错误

    去掉上面的 mode 参数会报另外的错,意思是 fetch 只支持 chrome-extension, chrome-untrusted, data, edge, http, https, isolated-app. 这类协议

    那你就别用 file 协议访问
    NessajCN
        12
    NessajCN  
       56 天前 via Android
    @pcxys fetch 不是用来读本地文件的,或者说浏览器就不支持读本地文件,不然网站上随便来个脚本就能读你电脑里的文件不是乱套了吗
    你要读这个 json ,首先是把这个文件用 http server 开放出去,也就是能在浏览器里用 http://xxx/xxx.json 访问到,这样浏览器在从其他地方 fetch 这个文件就是合法的。具体到你这个例子,我假设你是用 nginx 当服务器,那你就把 json 文件放到 index.html 同目录,然后再在 index.html 里 fetch("xxx.json")应该就能获取到了
    pcxys
        13
    pcxys  
    OP
       56 天前
    @humbass
    确实是初学者,如果不能用,我应该用什么函数去调取本地的 json 比较好?
    pcxys
        14
    pcxys  
    OP
       56 天前
    @lisongeee
    对,如果取消掉就会出现好像是跨域的错误。
    那你有什么好的办法或者函数可以使用嘛?
    pcxys
        15
    pcxys  
    OP
       56 天前
    @NessajCN
    那大家一般如何去调取本地的 json 文件的呢?有什么好用的函数吗?
    lisxour
        16
    lisxour  
       56 天前
    @pcxys #15 调不了,开个本地服务吧,或者使用浏览器最新支持的 native fs api ,不过这个就算了
    daozun
        17
    daozun  
       56 天前
    使用 vscode 开发的话,下载一个 Live server 插件,它会在本地开启一个服务器,应该对你有帮助
    bojackhorseman
        18
    bojackhorseman  
       56 天前 via iPhone
    看下来应该是 response.json 方法报错了,响应结果无法 json 序列化,加个 try catch 就行了
    markgor
        19
    markgor  
       56 天前
    @pcxys 本地為何不直接 import 過來
    markgor
        20
    markgor  
       56 天前
    不知道你想幹什麼,這個 json 是發佈之後也是本地的,還是說發佈後是請求線上的。
    如果是發佈後請求線上的,但是你現在想調試,你可以看看 mock 這方面得。
    如果發佈後都是不需要請求後端的,直接 import
    DOLLOR
        21
    DOLLOR  
       56 天前
    请部署到 HTTP 服务器再打开,fetch 和 XHR 不支持本地( file://)调用,并且没有任何 workaround ,包括 mode: 'no-cors'也不会解决你的问题。
    ziyanghua
        22
    ziyanghua  
       56 天前
    vs code 用 live server 插件模拟服务器,把那个 json 文件放在项目里面。这样你本地读取就没有问题了 初学者的话善用 ai 可能会比问大家更有帮助一些 加油哈
    humbass
        23
    humbass  
       56 天前
    @pcxys 答案就是: 在浏览器中的 html 脚本读不到那个文件,你需要启用一个 http server.
    yanqing07
        24
    yanqing07  
       56 天前
    @pcxys #15 require('/tmp/xxx.json')。 /tmp 替换成你的文件实际路径
    jinliming2
        25
    jinliming2  
       55 天前 via iPhone
    @pcxys 如果是要调用本地的文件,不管啥类型,只有通过 input type="file" (可以用脚本)让用户选择对应的文件,然后你才能拿到用户选择的文件的只读访问权限。
    或者通过 File System API https://developer.mozilla.org/en-US/docs/Web/API/File_System_API 要求用户授权这个文件或者文件夹的权限,然后就能读取或写入文件,但这个 API 仅限于安全上下文,比如 https 下。
    jinliming2
        26
    jinliming2  
       55 天前 via iPhone
    且是实验性的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2198 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:38 · PVG 09:38 · LAX 17:38 · JFK 20:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.