2017-01-11 17 views
1

私は、POSTリクエストを受け取ったときに特定の機能を実行するDjangoビューを持っています。Djangoビューを別々のAJAX呼び出しにする

スニペット:次のようにこれは、AJAX経由で呼び出され

def run_function(request): 
    if request.method == 'POST': 
     run_some_function() 

は:予想通り

$.ajax({ 
    'type' : 'POST', 
    'url' : '/run_function/', 
    'data' : data, 
    'success' : function(json) { 
      // Display results to user 
     } 
    }); 

これは動作します。しかし、この特定の関数は実行に時間がかかることがあるので、ユーザーに進捗情報を表示する必要があります。

幸いにも、私はタスクの進行状況(0-100の間の整数)を返すことができる別の関数を持っています。

スニペット:

def get_progress(request): 
    progress = calculate_progress() 
    return HttpResponse(json.dumps(progress), content_type="application/json") 

私は、AJAXの進捗状況を取得し、私のプログレスバーを更新するために、すべてのX秒を呼び出すことができます:

function check_progress() { 
    $.ajax({ 
     'type' : 'POST', 
     'url' : '/get_progress/', 
     'success' : function(response) { 
      if (response >= 100) { 
       // Update progress bar to 100% and clearInterval 
      } else { 
       // Update the progress bar based on the value returned by get_progress 
      } 
     } 
    }); 
} 

var check = setInterval(check_progress, 500); 

問題は私が行うことができますどのように...です同時に両方? を実行するためのAJAXコールを作成して、AJAXコールで進行状況を同時に監視できるようにする必要があります。

これを達成するための提案はありますか? 2つのAJAXコールを作るよりも優れたデザインですか?

ありがとうございました!

+0

単一AJAX呼び出しを行い、あなたが好きなように多くの追加のビューとして取り扱いビューコールをしましょう。 – Wtower

+0

@Wtower興味深い考えですが、ビューからJavaScriptにデータをどのように戻すことができますか?関数を実行するための新しいプロセスを開始するとしましょう。次に、実行中に、ビューにHTTPResponseを返す別のビューが呼び出されます。それを呼び出し側のビューに戻すことはできませんか?この設計では、関数が実行されている間にJSサイドを動的に更新する方法を理解していません。 – AndroidNoobie

+0

右。その後、あなたのコードをリファクタリングし、共通のコードをPythonモジュールに置きます。 – Wtower

答えて

0

AJAXのAは、非同期の略です。あなたは特別なことをする必要はありません。あなたの意見や進捗状況をお持ちの場合は整理、すべてを行う必要がある:

$.ajax({ 
    'type' : 'POST', 
    'url' : '/run_function/', 
    'data' : data, 
    'success' : function(json) { 
      // Display results to user 
     } 
    }); 
var check = setInterval(check_progress, 500); 
+0

ありがとう!多くのブラウザで2つの同時AJAXリクエストに制限されていますが、今のところそれが必要です。 – AndroidNoobie

+0

はい、これは、一度に2つ以上のリクエストが実行されることとは非常に異なります。 – e4c5

関連する問題