jQuery + Django:将350KB的文本数据从服务器传输到客户端?
问题描述:
我正在构建一个基于Django的网站,前端使用jQuery。它的一个方面是服务器发送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,以便这些记录可以方便地存储在客户端(仅用于会话的长度当然)为了上述目的?我接受建议。
答
这将取决于你将如何处理客户端上的数据。只需将其显示为200 <div>标签?或者客户将不得不使用这些数据?在这种情况下,您可能希望将其作为JSON数据发送。然后它可以通过JavaScript直接读入数据结构。
答
从我们提供的额外信息中,我只是将数据作为常规的Django模板提供,您可以根据需要随时调用这些模板。您只需要按照next
ping服务器一次,而不是每次下一次。将其作为普通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>
它只会被显示,在时刻(5个文本域)只有一个记录。所以在客户端,只有5个DIV,显示一条记录,简单地说,就是一个“下一步”按钮,所以当用户按下它时,下一条记录将放入这5个DIV中并显示出来。 – Riddler 2011-02-06 11:14:04
我会根据需要使用jQuery .load()方法来获取每一个,这些方法可以直接将内容加载到元素中,而无需重新加载页面,并且可以包装所有Ajax复杂性。所以你的'下一个'按钮只需要5次.load()调用,你的Django服务器有一个URL模式和一个视图,它只是发送你的一个块。 – Spacedman 2011-02-06 11:27:12