2012-03-22 35 views
2

我有一個視圖,可能需要幾秒鐘才能處理GET請求並呈現結果。我想建立一個臨時頁面,上面寫着「正在處理...」,而視圖正在做它的東西。我怎樣才能做到這一點?在處理GET請求時顯示臨時頁面

UPDATE

我沒有在鏈接到我的網頁的任何控制。這是第三方在他們的頁面上給我的鏈接。當他們點擊它時,我運行一些東西並顯示結果。我不希望他們必須點擊我展示的網頁上的任何內容。

理想情況下,我想以下幾點:

  1. 用戶單擊我的網站的鏈接是第三方網站
  2. 我的網站顯示「處理請求」消息 - 用戶沒有按」不必點擊任何東西,只需等待。
  3. 幾秒鐘後顯示結果。

所有用戶只需點擊一個鏈接並等待結果。

一些示例代碼將不勝感激,因爲我對像jQuery這樣的東西相當陌生 - 如果這就是我所需要的。

回答

2

使用jQuery顯示該消息在等待視圖返回結果。

在包含處理消息/圖像的頁面中放置一個隱藏的div標籤。

如果通過單擊按鈕提交GET請求,則在按鈕上放置一個onclick事件以顯示div標籤。視圖完成處理後,頁面將被重新加載並顯示目標頁面。

如果使用AJAX調用視圖,則可以將div的顯示/隱藏放置在ajaxStart和ajaxComplete事件中。

編輯:確定,因爲頁面將被第三方調用它會使事情複雜一點。我建議你在沒有數據的情況下加載頁面,並且一旦加載了頁面,你就會執行AJAX GET請求來檢索數據。

你可以做如下:

一個隱藏的div標籤的頁面添加與進度消息/圖像。

<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 
    }); 
}); 

上面的代碼尚未經過測試,但它會給你一個想法。

UPDATE

我建議您從您的視圖返回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中的。

+0

謝謝。如果這能滿足我上面的要求(請參閱步驟1,2,3),你可以給出一些示例代碼。 – TonyM 2012-03-22 13:45:32

+0

請參閱上面的編輯 – Mikael 2012-03-23 10:15:50

+0

謝謝。要做AJAX get,是否必須更改我現有的Django視圖以使其成爲Ajax?我認爲這些數據將包含我的視圖返回的所有HTML頁面?我可以只顯示這個嗎? – TonyM 2012-03-23 10:42:19

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> 
+0

謝謝,但我沒有任何控制我的網頁的鏈接。這是他們在他們的頁面上的鏈接。我不希望他們必須點擊我展示的網頁上的任何內容。 – TonyM 2012-03-22 13:35:25

相關問題