2016-07-15 78 views
5

我想使用AJAX检索我想要在用户端显示的推送通知的详细信息,但它不起作用。服务工作者和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' 
     }) 
    ); 
}); 

当我使用GCM来推送通知发送到客户端,浏览器提供了对服务人员这个错误:

sw.js:39未捕获的ReferenceError:XMLHttpRequest的是没有定义

+0

[服务工作者中的XMLHttpRequest]从服务人员(http://stackoverflow.com/questions/37112425/xmlhttprequest-within-service-worker) – Marco

回答

9

XMLHttpRequest已被弃用,并且在Service Worker范围内不可用。而不是XMLHttpRequest,您可以使用Fetch API

+1

他们严肃地除去常规阿贾克斯的可能的复制? WTF?看起来我不会长期使用它。 –

+0

@MichaelHanon,是的,它的真实,取指是唯一的方法。另请参阅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

为此,我们可以在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); 
    }); 

如果您想使用cookie等凭据进行提取请求,则应该将请求的凭据设置为“include”。

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

服务人员无法访问cookie。 –