2016-05-19 7 views
2

私はdjangoプロジェクトで作業していますが、私はこのようなタスクのステータスを確認するためにこのようないくつかのことを持っていることから、ユーザーは見ることのできないセロリでバックグラウンドタスクを実行しています状況が成功するとAjaxユーザー通知

{ 
    "task": { 
     "status": "PENDING", 
     "result": null, 
     "id": "3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd" 
    } 
} 

タスクが完了した場合:タスクが実行されている場合は、

'/tasks/3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd/status/' 

フォームは私が

のようなJSONレスポンスを取得し、この

{ 
    "task": { 
     "status": "SUCCESS", 
     "result": null, 
     "id": "3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd" 
    } 
} 

ステータスが「成功」に変更された場合は、AJAXを使用して状態をチェックしてください。ステータスが「成功」に変更された場合は、タスクが完了したことをユーザーに通知する通知またはメッセージが必要です。正常に(facebookやtwitterのように)、閉じるとブラウザを開いた場合、通知は、ユーザーがそれをクリックするまでそこに残る必要があります。私は非常にAJAXに新しいです、誰もこれを達成するために私を助けてください。どのようにajax呼び出しでこれを行うには。私のアプローチが間違っている場合は、これを達成するために他の方法があれば私を適切な方法で案内してください。

答えて

2

あなたが持っているURLをポーリングしSUCCESS状態を待ち、このような何かするsetTimeout()を使用することができます。

function checkTaskStatus() { 
    $.ajax({ 
     url: '/tasks/3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd/status/', 
     success: function(json) { 
      if (json.task.status == 'SUCCESS') { 
       // show a message to the user 
      } else { 
       setTimeout(checkTaskStatus, 10000); // try again in 10 seconds 
      } 
     } 
    }); 
} 

checkTaskStatus(); // check on load of the page 
+0

あなたは常に成功するかエラーが発生しますか?この例では、何らかの理由で応答がエラーである場合です。次回の投票は行われません。 – Yasser

+0

それはあなたのサーバーによって実際に異なります。一般的に、エラー応答を受け取った場合は、サーバーがまだ応答していない場合に問題を複合化する要求をサーバーにあふれさせる可能性があるため、再度ポーリングしません。あらかじめ設定された数のエラーが発生した後に、リクエストを停止するための耐性を追加することもできますが、カウンタや 'fail'ハンドラを追加する場合と同じように、実装するOPに任せておきますこの場合。 –

+0

うーん...あなたが何を言おうとしているのか分かります。しかし、初めてのタイムアウトがあった場合、少なくとも2回目の呼び出しが可能です。 – Yasser

0

$(ドキュメント).ready(関数(){ のsetInterval(ajaxcall、1000) ; // 1000マイクロ秒毎にajaxcallを呼び出す });

関数ajaxcall(){$ アヤックス({ URL: '/タスク/ 3dbf226a-a7f5-4e9b-8094-4ad1383aa6fd /ステータス/'、 成功:機能(JSON){ 場合(json.task .status == 'SUCCESS'){ //ユーザーにメッセージを表示 } } }); }

関連する問題