0

ここで SO に関する大きな助けを得た後、次のスニペットを使用して JS オブジェクトを構築しました。

var noticeMap = $('#preExamNoticesTable tbody tr').map(function() {
    var $cells = $(this).children();
    return {
      sequence: $cells.eq(0).children('input').val(),
      noticeUID: $cells.eq(1).text()
    };
});

結果の noticeMap の例は次のようになります (firebug から):

jQuery(Object { sequence="1", noticeUID="JP-L23013663997630352308"},
Object { sequence="3", noticeUID="JP-L22913664089460612172"}, 
Object { sequence="4", noticeUID="JP-L22913664090188631530"}, 
Object { sequence="2", noticeUID="JP-L22913664089408651799"})

私が試してみるJSON.stringify(noticeMap)と、POSTで渡したくない余分なデータが文字列に追加されることを除けば、うまく機能します。各値 (noticeMap のオブジェクト) に対して数値キーを生成しますが、最後の目的の k:v ペアの後、文字列にはコンテキスト objlength、およびprevObject obj も含まれます。stringify()これを POST した後の JSON は次のとおりです。

{ "0": { "sequence": "1", "noticeUID": "JP-L23013663997630352308" }, "1": { "sequence": "3", "noticeUID": "JP-L22913664089460612172" }, "2": { "sequence": "4", "noticeUID": "JP-L22913664090188631530" }, "3": { "sequence": "2", "noticeUID": "JP-L22913664089408651799" }, "length": 4, "prevObject": { "0": {}, "1": {}, "2": {}, "3": {}, "length": 4, "prevObject": { "0": { "location": {}, "jQuery19105836315711643562": 1 }, "context": { "location": {}, "jQuery19105836315711643562": 1 }, "length": 1 }, "context": { "location": {}, "jQuery19105836315711643562": 1 }, "selector": "#preExamNoticesTable tbody tr" }, "context": { "location": {}, "jQuery19105836315711643562": 1 } }

何がこれを引き起こしているのかわかりません。stringify がオブジェクトの obj から JSON 文字列を作成する方法に関係があるという仮説を立て始めましたが、noticeMaps()現在は美しく機能している my を使用できません。何か案は?

ありがとう!

4

2 に答える 2

7

jQuery オブジェクトをシリアル化しているため、その中のすべてのシリアル化可能なプロパティが出力に含まれています。代わりにこれを試してください:

JSON.stringify(noticeMap.get()); // .get will return an array
于 2013-04-24T19:10:39.873 に答える
0

http://msdn.microsoft.com/en-us/library/ie/cc836459(v=vs.94).aspx

value に toJSON メソッドがある場合、JSON.stringify 関数はそのメソッドの戻り値を使用します。toJSON メソッドの戻り値が未定義の場合、メンバーは変換されません。これにより、オブジェクトは独自の JSON 表現を決定できます。

オブジェクトを文字列化しています。そのため、独自の方法でjsonを文字列化します

.get()パラメータの配列を取得するには、マップオブジェクトで使用する必要があります

noticeMap.get()

于 2013-04-24T19:16:09.083 に答える