Отображение временной страницы при обработке запроса GET - PullRequest
2 голосов
/ 22 марта 2012

У меня есть представление, которое может занять несколько секунд, чтобы обработать запрос GET и отобразить результаты.Я хотел бы разместить временную страницу с надписью «Обрабатывается ...», пока представление делает свое дело.Как я могу это сделать?

ОБНОВЛЕНИЕ

У меня нет никакого контроля над ссылкой на мою страницу.Это ссылка на меня третья сторона на своей странице.Когда они нажимают, я запускаю некоторые вещи и отображаю результаты.Я не хочу, чтобы им приходилось нажимать что-либо на отображаемых страницах.

В идеале мне хотелось бы следующее:

  1. Пользователь нажимает ссылку на мой веб-сайт, которая являетсяна стороннем веб-сайте
  2. На моих веб-сайтах отображается сообщение «запрос обработки» - пользователю не нужно ничего нажимать, просто подождите.
  3. Через несколько секунд отображаются результаты.

Все, что нужно было сделать пользователю, это щелкнуть ссылку один раз и подождать результатов.

Некоторые примеры кода будут с благодарностью приняты, поскольку я довольно новичок в таких вещах, как jQuery - есличто мне нужно.

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Используйте jQuery для отображения сообщения в ожидании представления, чтобы вернуть результат.

Поместите скрытый тег div на страницу, содержащую сообщение / изображение обработки.

Если вы отправляете запрос GET, нажимая кнопку, вы помещаете на кнопку событие onclick, чтобы отобразить тег div.Когда представление будет обработано, страница будет перезагружена и будет отображена целевая страница.

Если представление вызывается с помощью AJAX, вы можете поместить показ / скрытие div в события ajaxStart и ajaxComplete.

РЕДАКТИРОВАТЬ: ОК, поскольку страница будет вызываться третьей стороной, это немного усложнит ситуацию.Я бы посоветовал вам загрузить страницу без данных, и после загрузки страницы вы выполняете запрос AJAX GET для извлечения данных.

Вы можете сделать следующее:

Добавить скрытый div-Tag на страницу с сообщением / изображением хода выполнения.

<div id="progress">Please wait while the page is loading.</div>

Затем добавьте вызов GET ajax на страницу:

$(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')

Вы можететакже используйте метод getJSON () вместо get () в jQuery.

1 голос
/ 22 марта 2012

очень простой пример:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...