2

私はjavascriptとjqueryが初めてです。次のような状況があります。テーブルの編集された行をシリアル化し、ajax 経由でサーバーに送信しています。

元のデータ (編集前) と最終データ (編集された行) をサーバーに渡す必要があります。

それぞれを別々に渡すとうまくいきますが、それらをまとめると奇妙なことが起こります。JavaScriptをよく理解している人にとっては、おそらく些細なことです。

「送信コード」は次のとおりです。

$.ajax({
        data: data,
        dataType: 'json',
        ...
       });

元の行データまたは編集された行データを次のように取得すると:

data = tr.find(':input').serializeArray();

次のように、request.POST で通常の dict を取得します。

<QueryDict: {u'Type': [u'CNAME'], u'Name': [u'domain_2'], Ttl': [u'500'], u'Value': [u'domain_1']}>

しかし、次のように元のデータと新しいデータの両方を取得しようとすると:

original_data = tr.find(':input').serializeArray();
new_data = tr.find(':input').serializeArray();
var data = {}
data.original_data = original_data
data.new_value = new_data

これはうまくいきません。私はこのようなものを得る:

<QueryDict: {u'new_value[1][name]': [u'Type'], u'new_value[3][name]': [u'Ttl'], u'new_value[2][value]': [u'domain_1'], u'original_data[2][name]': [u'Value'], u'new_value[2][name]': [u'Value'], u'original_data[0][name]': [u'Name'], u'original_data[3][value]': [u'300'], u'original_data[1][value]': [u'CNAME'], u'new_value[3][value]': [u'500'], u'original_data[0][value]': [u'domain_2'], u'new_value[1][value]': [u'CNAME'], u'original_data[3][name]': [u'Ttl'], u'new_value[0][name]': [u'Name'], u'original_data[2][value]': [u'domain_1'], u'original_data[1][name]': [u'Type'], u'new_value[0][value]': [u'domain_2']}>

手に入れたいと思っていた

<QueryDict: {'original_data': {u'Type': [u'CNAME'], u'Name': [u'domain_2'], Ttl': [u'500'], u'Value': [u'domain_1']}, 'new_value': {u'Type': [u'CNAME'], u'Name': [u'domain_2'], Ttl': [u'500'], u'Value': [u'domain_1']}>>

どうすればこれを達成できますか?

4

2 に答える 2

1

encodeURIComponent(JSON.stringify(data))解決策は、のみの代わりに使用することでしdataた。

私はdjangoを使用しているので、dajaxiceも使用したので、実際に追加'argv='+encodeURIComponent(JSON.stringify(data))したので、Dajaxiceは呼び出されたキーを探し'argv'て値を取得します。

于 2012-10-24T15:45:45.187 に答える
0

request.POST通常のフォーム エンコードとして送信されるデータ用です。それを送信するのではなく、生の JSON 文字列を送信しています。ビューでアクセスするには、 を使用しますrequest.body

于 2012-10-23T13:58:15.507 に答える