Unexpected end of input 错误,求教 - V2EX
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 2024-10-26 13:28:59 +08:00 2562 次点击
    这是一个创建于 399 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    当然 node.js 也有 fetch ,那个可以直接读取
    lisongeee
        11
    lisongeee  
       2024-10-26 15:56:30 +08:00
    测试了一下,确实出现了这个错误

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

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

    那你就别用 file 协议访问
    NessajCN
        12
    NessajCN  
       2024-10-26 16:19:09 +08:00 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
       2024-10-26 16:57:08 +08:00
    @humbass
    确实是初学者,如果不能用,我应该用什么函数去调取本地的 json 比较好?
    pcxys
        14
    pcxys  
    OP
       2024-10-26 16:58:08 +08:00
    @lisongeee
    对,如果取消掉就会出现好像是跨域的错误。
    那你有什么好的办法或者函数可以使用嘛?
    pcxys
        15
    pcxys  
    OP
       2024-10-26 16:59:56 +08:00
    @NessajCN
    那大家一般如何去调取本地的 json 文件的呢?有什么好用的函数吗?
    lisxour
        16
    lisxour  
       2024-10-26 17:11:16 +08:00
    @pcxys #15 调不了,开个本地服务吧,或者使用浏览器最新支持的 native fs api ,不过这个就算了
    daozun
        17
    daozun  
       2024-10-26 17:26:17 +08:00
    使用 vscode 开发的话,下载一个 Live server 插件,它会在本地开启一个服务器,应该对你有帮助
    dumbass
        18
    dumbass  
       2024-10-26 17:52:33 +08:00 via iPhone
    看下来应该是 response.json 方法报错了,响应结果无法 json 序列化,加个 try catch 就行了
    markgor
        19
    markgor  
       2024-10-26 18:08:37 +08:00
    @pcxys 本地何不直接 import
    markgor
        20
    markgor  
       2024-10-26 18:09:54 +08:00
    不知道你想什, json 是之後也是本地的,是後是求上的。
    如果是後求上的,但是你在想,你可以看看 mock 方面得。
    如果後都是不需要求後端的,直接 import
    AV1
        21
    AV1  
       2024-10-26 18:54:44 +08:00
    请部署到 HTTP 服务器再打开,fetch 和 XHR 不支持本地( file://)调用,并且没有任何 workaround ,包括 mode: 'no-cors'也不会解决你的问题。
    ziyanghua
        22
    ziyanghua  
       2024-10-26 19:05:25 +08:00
    vs code 用 live server 插件模拟服务器,把那个 json 文件放在项目里面。这样你本地读取就没有问题了 初学者的话善用 ai 可能会比问大家更有帮助一些 加油哈
    humbass
        23
    humbass  
       2024-10-27 02:52:24 +08:00
    @pcxys 答案就是: 在浏览器中的 html 脚本读不到那个文件,你需要启用一个 http server.
    yanqing07
        24
    yanqing07  
       2024-10-27 07:06:36 +08:00
    @pcxys #15 require('/tmp/xxx.json')。 /tmp 替换成你的文件实际路径
    jinliming2
        25
    jinliming2  
       2024-10-27 11:10:42 +08:00 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  
       2024-10-27 11:12:01 +08:00 via iPhone
    且是实验性的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2633 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 12:58 PVG 20:58 LAX 04:58 JFK 07:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86