2016-07-15 320 views
5

Sto cercando di utilizzare AJAX per recuperare i dettagli per la notifica push che voglio mostrare agli utenti, ma non funziona ancora.Service Worker e AJAX

/* 
* 
* Push Notifications codelab 
* Copyright 2015 Google Inc. All rights reserved. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  https://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or  implied. 
* See the License for the specific language governing permissions and 
* limitations under the License 
* 
*/ 

// Version 0.1 

//'use strict'; 

console.log('Started', self); 

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); 

    var title = 'Push message'; 
    var xhttp = new XMLHttpRequest(); 

    xhttp.open("GET", "https://www.domain.nl/devtest/1.php", false); 
    xhttp.send(); 
    title = xhttp.responseText; 

    event.waitUntil(
     self.registration.showNotification(data, { 
      'body': 'The Message', 
      'icon': 'images/icon.png' 
     }) 
    ); 
}); 

Quando uso GCM per inviare una notifica push al cliente, Chrome dà questo errore sul operaio di servizio:

sw.js: 39 Uncaught ReferenceError: XMLHttpRequest non è definito

+0

Eventuali duplicati di [XMLHttpRequest all'interno operaio di servizio] (http://stackoverflow.com/questions/37112425/xmlhttprequest-within-service-worker) – Marco

risposta

9

XMLHttpRequest è stato dichiarato obsoleto e non è disponibile nell'ambito di Service Worker. Invece di XMLHttpRequest, è possibile utilizzare lo Fetch API.

+1

Essi seriamente rimossi ajax regolare da parte del lavoratore di servizio? WTF? Sembra che non lo userò da molto tempo. –

+0

@MichaelHanon, Yea è vero, il recupero è l'unico modo. vedi anche https://stackoverflow.com/a/46727718/632951 – Pacerier

+0

https://www.fxsitecompat.com/en-CA/docs/2015/xmlhttprequest-is-no-longer-available-in-service-workers/ – Pacerier

0

Per fare ciò possiamo impostare il metodo ei parametri del corpo nelle opzioni fetch().

fetch(url, { 
    method: 'post', 
    headers: { 
     "Content-type": "application/x-www-form-urlencoded; charset=UTF-8" 
    }, 
    body: 'foo=bar&lorem=ipsum' 
    }) 
    .then(json) 
    .then(function (data) { 
    console.log('Request succeeded with JSON response', data); 
    }) 
    .catch(function (error) { 
    console.log('Request failed', error); 
    }); 

dovrebbe volete fare una richiesta di recupero con le credenziali come i cookie, è necessario impostare le credenziali della richiesta di "comprendono".

fetch(url, { 
    credentials: 'include' 
}) 
+1

I lavoratori del servizio non hanno accesso ai cookie. –