我有一个视图,可能需要几秒钟来处理GET请求并呈现结果。我想建立一个临时页面,上面写着“处理......”,而视图正在做它的东西。我怎么能这样做?
更新
我无法控制指向我网页的链接。这是第三方在他们页面上的链接。当他们点击它时,我运行一些东西并显示结果。我不希望他们必须点击我显示的页面上的任何内容。
理想情况下,我想要以下内容:
用户所要做的只是点击一次链接并等待结果。
一些示例代码将非常受欢迎,因为我对jQuery这样的东西很新 - 如果这就是我需要的。
答案 0 :(得分:2)
在等待视图返回结果时使用jQuery显示消息。
在包含处理消息/图像的页面中放置一个隐藏的div标签。
如果您通过单击按钮提交GET请求,则会在按钮上放置onclick事件以显示div-tag。视图完成处理后,将重新加载页面并显示目标页面。
如果使用AJAX调用视图,则可以将div的显示/隐藏放在ajaxStart和ajaxComplete事件中。
编辑:好的,因为页面将由第三方调用,它会使事情变得复杂一些。我建议您加载没有数据的页面,一旦加载页面,您就会执行AJAX GET请求来检索数据。
你可以这样做:
使用Progress消息/图像向页面添加隐藏的div-tag。
<div id="progress">Please wait while the page is loading.</div>
然后将ajax GET调用添加到页面:
$(document).ready(function () {
//Attach the ajaxStart and ajaxComplete event to the div
$('#progress').ajaxStart(function() {
$(this).show();
});
$('#progress').ajaxComplete(function() {
$(this).hide();
});
//Perform the AJAX get
$.get('/your_view/', function(data) {
//Do whatever you want with the data here
});
});
上面的代码尚未经过测试,但它会给你一个想法。
<强>更新强>
我建议您从视图中返回JSON对象或类似对象:
companies = Company.objects.filter(name__istartswith=companyname)
results = [{'value': company.name, 'id':company.id} for company in companies ]
json = simplejson.dumps(results)
return HttpResponse(json, mimetype='application/json')
您也可以在jQuery中使用getJSON()方法而不是get()。
答案 1 :(得分:1)
非常简单的例子:
<script>
showProcessingMessage = function() {
$("body").append('<div id="style_me_as_message">processing request</div>');
}
$("body").on('click', "a.slow", showProcessingMessage);
</script>
<a class="slow" href="/slow-response-page/">show slow page</a>