多くのユーザーはまだ IE8 を使用しています。一部のユーザーは、時折、データをサーバーに投稿しようとしたときに問題を報告しています (「保存」というラベルの付いた大きなボタンを使用)。
IE8 が表示するスクリプト エラーがあります。これは、メソッドまたはプロパティ アクセスへの予期しない呼び出しであり、常に KnockoutJS 2.2.0 (今のところデバッグ) ライブラリの同じ行を指している、行 450 です。これは次のとおりです。
return JSON.stringify(ko.utils.unwrapObservable(data), replacer, space);
これが発生するスタック トレースのルートにある私のコードのメソッドは次のとおりです。
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"
});
};
このアプローチを使用して、オブジェクトを JSON に変換するときに、POST に必要のない多くのプロパティを取り除きます。 -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;
}
失敗するとラインで一貫して失敗する
var jsonData = ko.toJSON(self);
ここに本当の混乱があります:
- それは一貫して起こっているわけではありません
- すべての IE8 ユーザーに発生するわけではありません
- 一貫して再現することはできません
- シリアライズしているモデルの構造は重要ではないようです
- jscript.dll は IE8 の現在のバージョンです。