0
/* Helper function to clean up any current data we have stored */
function insertSerializedData(ids, type) {
    // Get anything in the current field
    current_data = $('#changes').val();
    if (!current_data) {
        var data = new Array();
        data[type] = ids;
        $('#changes').val(JSON.stringify(data));
    } else {
        var data = JSON.parse($('#changes').val());
        data[type] = ids;
        $('#changes').val(JSON.stringify(data));
    }
    console.log($('#changes').val());
}

次の関数を使用して、現在の JSON オブジェクトにデータを追加するか、後で PHP で使用する新しい JSON オブジェクトを作成します。stringify() メソッドは FF 専用ですか? Google Chrome を使用していますが、conosole.log() 関数を使用すると空のオブジェクトが与えられます...

また、同じキーで 2 つの値を保存しようとするとどうなりますか? 上書きすると思います...したがって、重複が表示されないようにするために、最後の配列にランダムな数学番号を追加する必要がありますか?

ありがとう :)

4

2 に答える 2

2

これらの行は問題を引き起こす可能性があります:

var data = new Array();
data[type] = ids;

... JavaScript の配列は、PHP の配列とあまり似ていないためです。私はあなたが意味したことをよりよく表現すると思います...

var data = {};
data[type] = ids;

また、current_dataはこの関数に対してローカルであるように思われるため、これも でローカルとして宣言する必要がありますvarjQuery .data()メソッドで同様の機能がすでに実装されていることを除いて、他の問題は見られません。

更新: ここで遊ぶjsFiddleがあります。)私が試したところ、配列とオブジェクトの不一致が実際にChromeの動作を引き起こしたようです。

于 2012-06-22T00:14:55.353 に答える
0

少し再フォーマットしましたが、うまくいくようです。要素の「value」属性を#changesJSON文字列に設定します。type引数は、割り当てようとしている配列のインデックスであると想定されていますか?

function insertSerializedData(ids, type) {
  var changes = jQuery('#changes'), arr, val = changes.val();
  if (!val) {
    arr = [];
    arr[type] = ids;
    changes.val(JSON.stringify(arr));
  } else {
    arr = JSON.parse(val);
    arr[type] = ids;
    changes.val(JSON.stringify(arr));
  }
  console.log(changes);
}
于 2012-06-22T00:26:18.093 に答える