处理GET请求时显示临时页面

时间:2012-03-22 12:58:31

标签: django

我有一个视图,可能需要几秒钟来处理GET请求并呈现结果。我想建立一个临时页面,上面写着“处理......”,而视图正在做它的东西。我怎么能这样做?

更新

我无法控制指向我网页的链接。这是第三方在他们页面上的链接。当他们点击它时,我运行一些东西并显示结果。我不希望他们必须点击我显示的页面上的任何内容。

理想情况下,我想要以下内容:

  1. 用户点击第三方网站上我网站的链接
  2. 我的网站显示“处理请求”消息 - 用户无需点击任何内容,只需等待。
  3. 几秒钟后显示结果。
  4. 用户所要做的只是点击一次链接并等待结果。

    一些示例代码将非常受欢迎,因为我对jQuery这样的东西很新 - 如果这就是我需要的。

2 个答案:

答案 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>