Alcuni dei nostri utenti sono ancora su IE8. Alcuni di loro occasionalmente segnalano problemi quando provano a inviare dati ai nostri server (tramite un grosso pulsante con l'etichetta "SAVE").KnockoutJS con IE8, problemi occasionali con Stringify?
C'è un errore di script che IE8 mostra, che è: chiamata imprevista di metodo o proprietà di accesso, sempre indicando la stessa linea nei KnockoutJS 2.2.0 (debug, per ora) biblioteca, la linea 450, che è il seguente:
return JSON.stringify(ko.utils.unwrapObservable(data), replacer, space);
procedimento nel mio codice che è alla base della stack quando ciò accade è questo:
self.saveSingle = function (onSuccess, onFailure) {
ko.utils.arrayForEach(self.days(), function (day) {
day.close();
});
var jsonData = ko.toJSON(self);
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: applicationLocation + "/api/assignmentapi/save",
data: jsonData,
success: function (data) {
self.status(data.Status);
self._isDirty(false);
ko.utils.arrayForEach(self.days(), function (day) {
day.clean();
});
if (onSuccess)
onSuccess();
},
error: function (data) {
onFailure();
},
dataType: "json"
});
};
Noi spogliare una serie di proprietà che non sono necessarie al nostro post come convertiamo il opporsi a JSON, utilizzando questo approccio: http://www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html
OurType.prototype.toJSON = function() {
var copy = ko.toJS(this);
delete copy.someUnneededProperty1;
delete copy.someUnneededProperty2;
delete copy.someUnneededProperty3;
delete copy.someUnneededProperty4;
return copy;
}
Quando fallisce, fallisce costantemente sulla linea
var jsonData = ko.toJSON(self);
Ora arriva il vero disastro:
- Non è costantemente accadendo
- Non capita a tutti gli utenti di IE8
- Non possiamo costantemente riprodurlo
- La struttura del nostro modello che stiamo serializzazione non sembra importa
- Il jscript.dll è la versione corrente per IE8
Includiamo json2 per gli utenti di IE7. Nessun utente IE7 ha segnalato un problema; solo gli utenti IE8. – reallyJim
Interessante. Potrebbe essere che gli utenti di IE8 siano effettivamente in esecuzione in modalità di emulazione IE7 (compatibilità di pagine IE)? –
Il nostro staff addetto al controllo qualità è * a volte * in grado di riprodurlo ed è in modalità IE8 quando lo fa. – reallyJim