Хочу реализовать background sync, для этого во время запросов на сохранение какого либо текста, запросы не идут на сервер, а сохраняются в indexedDB, потом при событии sync, service worker пробегается по всем объектам в IndexedDB и отправляет запросы на сервер, дело в том, что все запросы у меня через Ajax, с fetch работать не привык, то есть я как то адаптировал те данные для ajax запросов для fetch. В итоге при запросе на сервер нет никаких данных, $_POST пустой, php://input = "[object Object]", хотя Content-Type:'x-www-form-urlencoded'.
Вот код service worker'a:
self.addEventListener('sync',function(event){
if(event.tag == 'requestsync'){
request = indexedDB.open('requests');
request.onsuccess = function(event){
var db = event.target.result,storage,transaction,data;
transaction = db.transaction('requeststorage','readonly');
storage = transaction.objectStore('requeststorage');
data = storage.getAll();
data.onsuccess = function(event){
data = event.target.result;
for(key in data){
object = data[key];
console.log(object);
transaction = db.transaction('requeststorage','readwrite');
storage = transaction.objectStore('requeststorage');
delrequest = storage.delete(object.id);
delrequest.onsuccess = function(event){
console.log('Deleted request');
}
var settings = {
method: object.options.type,
mode:'cors',
headers: object.options.headers ? object.options.headers : {'Content-Type':'application/x-www-form-urlencoded'},
cache:'no-cache',
credentials:'include',
redirect:'follow',
body: object.data
};
fetch(object.options.url,settings).then(function(response){
response.json();
})
.then(function(body){
console.log(body);
})
}
}
}
request.onupgradeneeded = function(event){
var db = event.target.result;
if(!db.objectStoreNames.contains('requeststorage')){
db.createObjectStore('requeststorage',{keyPath:'id',autoIncrement:true});
}
}
}
});
При этом сам код всю свою задачу выполняет, т.е. в settings содержаться все нужные данные.