Я пытаюсь создать систему push-уведомлений на хроме. У меня есть php, который извлекает данные из mysql и перекликается с JSON, теперь я бы хотел вызвать функцию getJsonCode (), которая активируется при поступлении push-уведомления и считывании данных JSON.
В рамках моего сервисного работника я создал функции стандартов. Проблема в том, что когда я создаю getJsonCode с XMLHttpRequest, он говорит мне, что он не определен
self.addEventListener('install', function(event) { self.skipWaiting(); console.log('Installed', event); }); self.addEventListener('activate', function(event) { console.log('Activated', event); }); self.addEventListener('push', function(event) { console.log('Push message', event); getJsonCode(); ); }) getJsonCode() { codeRequest= new XMLHttpRequest(); codeRequest.open('get', 'myfileWithJson.php', true); codeRequest.send(); dataJSON = codeRequest.responseText; console.log('rispostaJSON'); }
Можно ли вызвать внешний файл, подобный этому, в служебном работнике или существуют какие-то ограничения? Потому что я не понимаю, почему это не работает
Вместо XMLHttpRequest
вы можете использовать новый API Fetch . XMLHttpRequest
устарел и недоступен в области рабочего рабочего.
Вот пример того, чего вы хотите достичь в этом рецепте Cookbook ServiceWorker .
Вы можете использовать fetch () вместо XHR, так как fetch () – это новый API, который позволяет вам делать запросы, похожие на XHR, но имеет более простой и дружественный API. Читайте больше об извлечении здесь . Попробуй это:-
self.addEventListener('push', function(event) { console.log('Push message', event); event.waitUntil( fetch('/myfileWithJson.php').then(function(response){ return response.json(); }).then(function(data){console.log(data); return self.registration.showNotification(data.title, { body: data.body, icon: 'images/icon.png', tag: data.url }); })); });
,self.addEventListener('push', function(event) { console.log('Push message', event); event.waitUntil( fetch('/myfileWithJson.php').then(function(response){ return response.json(); }).then(function(data){console.log(data); return self.registration.showNotification(data.title, { body: data.body, icon: 'images/icon.png', tag: data.url }); })); });