6

多くのユーザーはまだ 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);

ここに本当の混乱があります:

  1. それは一貫して起こっているわけではありません
  2. すべての IE8 ユーザーに発生するわけではありません
  3. 一貫して再現することはできません
  4. シリアライズしているモデルの構造は重要ではないようです
  5. jscript.dll は IE8 の現在のバージョンです。
4

3 に答える 3

1

これで問題が解決するかどうかはわかりませんが、マッピング プラグインを使用してJS と JSON を切り替えることができます。

var mapping = {
    'ignore': ["propertyToIgnore", "alsoIgnoreThis"]
}
var viewModel = ko.mapping.toJS(data, mapping);

この質問に対する私の回答から抜粋

あなたのアプローチには明らかな問題はないので、これを試して、それが役立つかどうかを確認します。

于 2013-03-04T16:40:33.470 に答える
0

問題が発生しているのは IE8 ユーザーですか? IE7 は JSON.stringify をサポートしていません。IE7 以前をサポートするには、 json2.js ライブラリを含める必要があります。

于 2013-03-04T16:46:48.573 に答える