2016-07-15 15 views
5

Ich versuche AJAX zu verwenden, um die Details für die Push-Benachrichtigung abrufen, die ich auf der Benutzerseite anzeigen möchte, aber es funktioniert noch nicht.Service Worker und 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' 
     }) 
    ); 
}); 

Wenn ich GCM verwenden, um eine Push-Benachrichtigung an den Client zu schicken, gibt Chrome diesen Fehler auf dem Servicemitarbeiter:

sw.js: 39 Uncaught Reference: XMLHttpRequest nicht definiert

+0

Mögliches Duplikat [XMLHttpRequest innerhalb Servicemitarbeiter] (http://stackoverflow.com/questions/37112425/xmlhttprequest-within-service-worker) – Marco

Antwort

9

XMLHttpRequest ist veraltet und im Service-Worker-Bereich nicht verfügbar. Anstelle von XMLHttpRequest können Sie die Fetch API verwenden.

+1

Sie ernsthaft regelmäßigen Ajax aus dem Servicemitarbeiter entfernt? WTF? Sieht so aus, als würde ich es für eine lange Zeit nicht benutzen. –

+0

@MichaelHanon, Ja, es ist wahr, holen ist der einzige Weg. Siehe auch 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

Um dies zu tun, können wir die Methode und Body-Parameter in den Fetch() - Optionen festlegen.

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

Sollten Sie eine mit Anmeldeinformationen wie Cookies Abrufanforderung zu machen, sollen Sie die Anmeldeinformationen des Antrags auf „schließen“.

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

Service-Mitarbeiter haben keinen Zugriff auf Cookies. –