【问题标题】:json content in response object in javascript returned from service worker从服务工作者返回的javascript中响应对象中的json内容
【发布时间】:2018-06-26 17:40:46
【问题描述】:

对不起,如果琐碎,或者已经问过,我找不到任何问题。我也不知道我做得对不对……

我刚刚开始学习服务工作者:

我想针对特定请求从服务人员返回一些 json 对象。注意:代码只是测试/学习代码: Service Worker 获取事件:

self.addEventListener('fetch', function(event) {
if(event.request.url.indexOf("not_existing.json") > -1){
    var obj = { "Prop" : "Some value" };
    event.respondWith(
        new Response(obj, {
            ok: true,
            status: 222,
            url: '/'
        })
    );    
}});

获取调用:

fetch('not_existing.json')
.then(function(responseObj) {
    console.log('status: ', responseObj.status);
    return responseObj.json();
})
.then(function (data){
    console.log(data); 
});

我知道服务人员捕获了请求,因为在“console.log('status: ', responseObj.status);”上我得到“222”,但脚本在“return responseObj.json();”上中断出现错误“未捕获(承诺中)SyntaxError:JSON 中位置 1 的意外标记 o”

如果我从服务人员返回“纯文本”,并使用“responseObj.text()”读取它,一切都很好!

在此链接“https://developer.mozilla.org/en-US/docs/Web/API/Response/Response”上,似乎我只需在响应构造函数var myResponse = new Response(body, init); 上编写正文即可

怎么了?如何指定json响应对象?

【问题讨论】:

    标签: javascript json ecmascript-6 fetch service-worker


    【解决方案1】:

    您实际上并没有使用 JSON 创建响应。 Response 的第一个参数是一个字符串或其他几个,但不是随机对象。如果你想要 JSON,你需要实际传递 JSON,例如

    var obj = JSON.stringify({ "Prop" : "Some value" });
    

    你得到的错误是因为目前它被转换为字符串

    "[object Object]"
    

    JSON.parse("[object Object]")
    

    抛出unexpected token "o"

    【讨论】:

    • 正是我想要回答的,只是错过了火车。 ;) 比我更好的解释。
    猜你喜欢
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2017-04-05
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多