Draft
This page is not complete.
XHR and calling Web Services
System XHR
In order to communicate with a web service, we can specify a `systemXHR` permission in our application manifest. In our podcasts app, we have this permission set to allow us to fetch and download podcasts. In our episode model, app/scripts/models/episode_model.js, we can see how to put XHR to use:
var request = new XMLHttpRequest({mozSystem: true}); request.open('GET', this.get('audioURL'), true); request.responseType = 'moz-chunked-arraybuffer'; request.addEventListener('load', function() { console.log(request.readyState, request); if (request.readyState === 4) { _this._loadComplete = true; } }); request.addEventListener('progress', function(event) { console.info('eventProgress', _this.get('_chunkCount')); localforage.setItem('ep:' + _this.get('id') + _this.get('_chunkCount'), request.response) .then(function() { // Increment our internal data chunk count. _this.incrementProperty('_chunkCountSaved'); if (_this.get('_loadComplete')) { console.log('chunk data assembled'); _this.set('isDownloading', false); _this.set('isDownloaded', true); } }); _this.incrementProperty('_chunkCount'); }); request.addEventListener('error', function(event) { window.alert('Error downloading this episode. Please try again.'); }); request.send(null);
Web Sockets
The web sockets API allows you to send messages to a server and receive event-driven responses without having to consistently poll for a reply. Though it is still under active development, it's a promising technology that makes it easy for you to maintain a connection stream between client and server.
Previously, all HTTP communication was handled by the client, which required persistent polling of the server for new data. With web sockets, both the server and client have the ability to send data at any time. This is especially useful when your application needs real-time data updates.
More information on working with Web Sockets is available on MDN here.