我有一個查詢表單,可以從服務器上的數據生成一個大的json對象。理想情況下,在提交時,應將用戶重定向到從AJAX請求更新的結果頁面(+進度欄),直到結果生成並準備顯示。django視圖+ AJAX:如何檢索表單POST後的數據
當前,當用戶提交表單時,它們將留在queryForm頁面上,同時生成結果。 dataFromQuery完成後實現回調的正確django方法是什麼?
這是我基於類的視圖的精簡版:
if request.is_ajax():
results = { "progress" : {'progress':1} }
try:
dataFromQuery
except NameError:
dataFromQuery_exists = False
else:
dataFromQuery_exists = True
results['data']=dataFromQuery
return JsonResponse(results)
但dataFromQuery沒有被傳遞到:
class QueryForm(generic.View):
form_class = ReturnQuery
template_name = 'myapp/form/queryForm.html'
def get(self, request, *args, **kwargs):
#render form
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
# <process form cleaned data>
print(request.POST)
print(form.cleaned_data)
# continues to build results object (json) which can take
# any length of time
return render(request, 'myapp/form/queryResults.html', {
'dataFromQuery': dataFromQuery,
})
我POST方法中試圖is_ajax()結果對象一旦完成。
JS:
var refreshIntervalId = setInterval(function(){
$.ajax({type: "POST",url: '/website/queryForm/', data: {csrfmiddlewaretoken : csrftoken}, dataType:'json', success: function(results){ //do something with results }})
});
我看了模板反應,但我不知道他們如何能幫助這裏,因爲它看起來像曾經的頁面渲染完成時執行回調。任何幫助,將不勝感激。
編輯:我可能有點不清楚。 results.progress在成功的AJAX上檢索,但此行:results ['data'] = dataFromQuery在生成結果後不會更新。
進展的作品(我每秒做一個ajax請求檢查results.progress,我已經有一個微調的提交按鈕,我想要的知道是否可以在django視圖中進行回調以將POST方法中的數據導入結果數據對象。 – Liz