2011-12-30 10 views
0

ソフトがなくなるまで、私はこれを頭に打ちました。専門家と相談する時間!クライアントサイドのAJAXポーリングを設定するには

私のアプリは多くのDelayed :: Jobsを生成します。私は、実行中のジョブの状態に関する視覚的なフィードバックをユーザに提供したいと思います。だから、私はジョブ名、状態(IDLE、QUEUED、RUNNING、SUCCEEDED、FAILED)とステータス文字列を持ち、状態とステータスが通常非同期に更新されるという、ジョブ<を持っていると仮定します。

また、ジョブのステータスを表示する場所として<div id='job-status'></div>要素を持つビューテンプレートを想定します。ああ、私もjQueryでRails3を使っていると仮定します。

移植性を最大限に高めるため、javascriptで開始されるクライアントサイドのポーリングを使用したいと思います。私はJavaScriptのビット(jQueryのメソッド、setTimeoutなど)を知っていますが、これを賢明な方法で行うためにRailsとjQueryの機能が混在することはありませんでした。

名前、状態、およびステータスのActiveRecordジョブモデルがあれば、コントローラ/ jobs_controller.rbには何を入れて、どのようなビュー/ジョブ/を実装しますか?そしてサーバーはhtmlまたはJSONやXMLを生成して#job-status divを更新しますか? (私はこれが広範な質問であることを認識しています。完全な答えを期待しているわけではありません。

答えて

2

データを返送するコントローラのjson対応メソッドに対してjqueryでajax呼び出しを行う必要があります。あなたがここに$("#somediv").html(ajax_result)

のような方法による効果とのdiv要素の内容を更新することができ、そのデータを使用して

本物のサンプルです:

var linkHtml = $("#searchNumber").html(); 
$("#message").empty(); 
var aurl = "/Prospect/SearchNumberAuth?number=" + $("#MSISDN").val() ; 
$.ajax({ 
    dataType: 'json', 
    type: "GET", 
    url: aurl, 
    async: false, 
    contentType: "application/json; charset=utf-8", 
    beforeSend: function() { 
     $("#holdNumber").fadeOut("slow"); 
     $("#searchNumber").empty().html("<image src='../../Content/images/jquery-ui/load-indicator.gif'/>"); 
    }, 
    success: function(response) { 
     $("#message").fadeIn(1500).html(function() { 
      if (response[0] == "Exist") { 
       $("#holdNumber").fadeIn("slow"); 
       $("#MSISDN").attr("readonly", "readonly"); 
       $("#searchNumber").fadeOut("slow"); 
       return existMsg; 
      } else if (response[0] == "Sold") { 
       $("#searchNumber").empty().html(linkHtml).fadeIn("slow"); 
       return soldMsg; 
      } else if (response[0] == "Hold") { 
       $("#searchNumber").empty().html(linkHtml).fadeIn("slow"); 
       return holdMsg; 
      } else 
       $("#searchNumber").empty().html(linkHtml).fadeIn("slow"); 
      return notExistsMsg; 
     }); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     $("#searchNumber").empty().html(linkHtml).fadeIn("slow"); 
    }, 
    complete: function() { 
    } 
}); 

そしてここで、コントローラクラス内のサーバー側のコードであることができますレールに簡単に移植できる:

_searchNumebr方法で、私は JsonResultを返します
public JsonResult SearchNumberAuth(long number) 
    { 
     return this._searchNumber(number); 
    } 

詳細はwebsiteですが、ペルシャ語ですが、ProspectView.jsでFirebugのjsコードと2番目のタブの結果を確認できます。

+0

私の質問の3分の1を解決するためにJani:+1:JSONをサーバー=>クライアントの応答に使用します。ありがとうございました。しかし、私が執着している他の部分は、(a)JSONをRailsのコントローラやビューでどのように構築するか、(b)定期的なポーリングを開始したり停止したりする方法です。 –

関連する問題