Browse code

Use two XMLHttpRequest objects

For some reason I don't understand, the introduction of the `uploadDone`
function messed with the garbage collector and triggered a lot of
Uncaught InvalidStateError: An attempt was made to use an object that is not,
or is no longer, usable.

Alternating between senders works around this problem.

Natasha Kerensikova authored on26/03/2016 23:53:50
Showing1 changed files
... ...
@@ -18,15 +18,17 @@ var cfg_endpoint = null;
18 18
 var cfg_data_field = null;
19 19
 
20 20
 var to_send = [];
21
-var sender = new XMLHttpRequest();
21
+var senders = [new XMLHttpRequest(), new XMLHttpRequest()];
22
+var i_sender = 1;
22 23
 
23 24
 function sendHead() {
24 25
    if (to_send.length < 1) return;
25 26
    var line = to_send[0].split(";")[1];
26 27
    var data = new FormData();
27 28
    data.append(cfg_data_field, line);
28
-   sender.open("POST", cfg_endpoint, true);
29
-   sender.send(data);
29
+   i_sender = 1 - i_sender;
30
+   senders[i_sender].open("POST", cfg_endpoint, true);
31
+   senders[i_sender].send(data);
30 32
 }
31 33
 
32 34
 function enqueue(key, line) {
... ...
@@ -42,8 +44,10 @@ function uploadDone() {
42 44
 
43 45
 function uploadError() { console.log(this.statusText); }
44 46
 
45
-sender.addEventListener("load", uploadDone);
46
-sender.addEventListener("error", uploadError);
47
+senders[0].addEventListener("load", uploadDone);
48
+senders[0].addEventListener("error", uploadError);
49
+senders[1].addEventListener("load", uploadDone);
50
+senders[1].addEventListener("error", uploadError);
47 51
 
48 52
 Pebble.addEventListener("ready", function() {
49 53
    console.log("Health Export PebbleKit JS ready!");