我从网址以数组形式提供以下数据。
[{"title":"hey hi","body":"hello","url":"https://simple-push-demo.appspot.com/","tag":"new"}]
服务worker.js 它在fetch()
中有上面的url 'use strict';
console.log('Started', self);
self.addEventListener('install', function(event) {
self.skipWaiting();
console.log('Installed new', event);
});
self.addEventListener('activate', function(event) {
console.log('Activatednew', event);
});
self.addEventListener('push', function(event) {
try{
console.log('Push message', event);
var ev = event;
//sample
return fetch("http://localhost/push-notifications-master/app/json.php").then(function(ev,response) {
response = JSON.parse(JSON.stringify(response));
return response;
}).then(function(ev,j) {
// Yay, `j` is a JavaScript object
console.log("j", j);
for(var i in j) {
var _title = j[i].title;
var _body = j[i].body;
var _tag = j[i].tag;
console.log("_body", _body);
}
ev.waitUntil(
self.registration.showNotification("push title", {
body: _body,
icon: 'images/icon.png',
tag: _tag
}));
});
return Promise.all(response);
}
catch(e){console.log("e", e)}
});
我试图在console.log("j",j);
中看到来自该特定网址的上述数组数据。但它显示未定义。如何在sw.js中获取动态数据请指南。
答案 0 :(得分:2)
在你的addEventListener(' push' ....方法中,我认为在解析它之前等待响应可能会更好。
此外,要检查,但您的php请求应该是https(不是由我自己检查,但我的请求是在https上)。
这是我如何做到的:
sed 's/< \(.*\) \(.*\) >/< \1\2 >/g' | sed 's/< \(.*\) \(.*\) $/< \1\2 /g' | sed 's/^ \(.*\) \(.*\) >/ \1\2 >/g'
json:
event.waitUntil(
fetch('YOUR PHP URL').then(function(response) {
if (response.status !== 200) {
console.log('Problem. Status Code: ' + response.status);
throw new Error();
}
// Examine the text in the response
return response.json().then(function(data) {
if (data.error || !data.notification) {
console.error('The API returned an error.', data.error);
throw new Error();
}
var title = data.notification[0].title;
var body = data.notification[0].body;
var icon = data.notification[0].icon;
var notificationTag = data.notification[0].tag;
return self.registration.showNotification(title, {body: body,icon:icon, tag: notificationTag});
});
})
);
希望它有用。