2011-02-06 5 views
2

フロントエンドでjQueryを使用したDjangoベースのWebサイトを構築しています。それの一つの側面は、サーバーがフロントエンドには、次の形式の200件のレコードを送信していることである:jQuery + Django:350KBのテキストデータをサーバーからクライアントに転送しますか?

field_1: up to 1000 character text 
field_2: up to 200 character text 
field_3: up to 200 character text 
field_4: up to 200 character text 
field_5: up to 200 character text 
field_6: a boolean value 

フロントエンドは、基本的には、JavaScriptを使用して、ページをリロードすることなく、それらのレコードにつまりを一つずつ表示されて何をしますか/ jQuery。

私の質問は、これらのレコードをクライアント側で便利に保存できるように、Djangoから主にテキストデータの〜350KBをjQueryに転送する最も便利な方法は何でしょうか(セッションの長さ、もちろん)上記の目的のために?私は提案に開放されています。

答えて

2

これは、クライアント上のデータをどのように処理するかによって異なります。ちょうど200 <div>タグのようなテキストで表示しますか?あるいは、クライアントはこのデータを処理する必要がありますか?この場合、JSONデータとして送信することができます。その後、Javascriptでデータ構造に直接読み込むことができます。

+0

それは一度に、(5つのテキストフィールドの)1つのレコードだけを表示します。したがって、クライアント側では、5つのDIVのようになり、1つのレコードを表示し、単に「次へ」ボタンを押すと、ユーザーがそれを押すと、次のレコードが5つのDIVに入れられて表示されます。 – Riddler

+0

jQuery .load()メソッドを使用して、必要に応じてそれぞれを取得します。これは、コンテンツをページにリロードせずにそのままロードし、すべてのAjaxの複雑さをラップすることができます。ですから、あなたの次のボタンは5つの.load()呼び出しであり、あなたのDjangoサーバーはあなたのチャンクの1つだけを送信するURLパターンとビューを持っています。 – Spacedman

+0

Spacedman - ありがとう、ちょうど右に聞こえる、それを試みる! – Riddler

1

あなたが提供した追加情報から、データを通常のDjangoテンプレートとして提供して、必要に応じて一度に1つずつ呼び出すといいでしょう。 nextごとに一度だけpingする必要があります。次回は5回ではありません。それを通常のHTMLとして提供し、jQueryを使用してそのフラグメントを直接どこにロードする必要があるかを指定します。このためにJSONを気にしないでください。少しでも利益があれば、より多くの作業ができます。

例:

#urls 
url(r'^record/(?P<record_id>\d+)/$', 'site.views.record', name='record') 

#views site/views.py 
def record(request, record_id): 
    obj = Record.objects.get(id=record_id) 
    return render_to_response('site/record_partial.html', { 
     'obj': obj 
    }, context_instance=RequestContext(request)) 

#templates site/record_partial.html 
    <div> {{ obj.field1 }} </div> 
    <div> {{ obj.field2 }} </div> 
    <div> {{ obj.field3 }} </div> 
    <div> {{ obj.field4 }} </div> 
    <div> {{ obj.field5 }} </div> 

# Page 
<div id='fields'> 
</div> 
<div id='next' data-page='3'> next >> </div> 
<script type='text/javascript'> 
    var next = $('#next').click(function() { 
     var page = $(next).data('page'); 
     $('#fields').load('/site/record/' + page + '/', function() { 
      $(next).data('page', page+1); // incr page number 
     }); 
    }) 
</script> 
+0

そして、もし私がすべてを入力する時間があったら、私は持っているでしょう:) +1 – Spacedman

+0

@Spacedman私もあなたも+1しました。あなたのコメントはこれに答えました。あなたの答えの後ろ=) –

関連する問題