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 · 17 小时 53 分钟前 · 635 次点击

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

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

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

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

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

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

    那你就别用 file 协议访问
    NessajCN
        12
    NessajCN  
       15 小时 3 分钟前 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
       14 小时 25 分钟前
    @humbass
    确实是初学者,如果不能用,我应该用什么函数去调取本地的 json 比较好?
    pcxys
        14
    pcxys  
    OP
       14 小时 24 分钟前
    @lisongeee
    对,如果取消掉就会出现好像是跨域的错误。
    那你有什么好的办法或者函数可以使用嘛?
    pcxys
        15
    pcxys  
    OP
       14 小时 22 分钟前
    @NessajCN
    那大家一般如何去调取本地的 json 文件的呢?有什么好用的函数吗?
    lisxour
        16
    lisxour  
       14 小时 11 分钟前
    @pcxys #15 调不了,开个本地服务吧,或者使用浏览器最新支持的 native fs api ,不过这个就算了
    daozun
        17
    daozun  
       13 小时 56 分钟前
    使用 vscode 开发的话,下载一个 Live server 插件,它会在本地开启一个服务器,应该对你有帮助
    bojackhorseman
        18
    bojackhorseman  
       13 小时 30 分钟前 via iPhone
    看下来应该是 response.json 方法报错了,响应结果无法 json 序列化,加个 try catch 就行了
    markgor
        19
    markgor  
       13 小时 14 分钟前
    @pcxys 本地為何不直接 import 過來
    markgor
        20
    markgor  
       13 小时 12 分钟前
    不知道你想幹什麼,這個 json 是發佈之後也是本地的,還是說發佈後是請求線上的。
    如果是發佈後請求線上的,但是你現在想調試,你可以看看 mock 這方面得。
    如果發佈後都是不需要請求後端的,直接 import
    DOLLOR
        21
    DOLLOR  
       12 小时 28 分钟前
    请部署到 HTTP 服务器再打开,fetch 和 XHR 不支持本地( file://)调用,并且没有任何 workaround ,包括 mode: 'no-cors'也不会解决你的问题。
    ziyanghua
        22
    ziyanghua  
       12 小时 17 分钟前
    vs code 用 live server 插件模拟服务器,把那个 json 文件放在项目里面。这样你本地读取就没有问题了 初学者的话善用 ai 可能会比问大家更有帮助一些 加油哈
    humbass
        23
    humbass  
       4 小时 30 分钟前
    @pcxys 答案就是: 在浏览器中的 html 脚本读不到那个文件,你需要启用一个 http server.
    yanqing07
        24
    yanqing07  
       16 分钟前
    @pcxys #15 require('/tmp/xxx.json')。 /tmp 替换成你的文件实际路径
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1046 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:22 · PVG 07:22 · LAX 16:22 · JFK 19:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.