2014-10-08 23 views
0

嗨我想創建一個頁面,它監視(查看)或呈現變量的值動態變量迭代變量。如何監視實例變量從紅寶石控制器通過查看HTML使用AJAX

view.html.erb

<a id='get_value' class="btn">Run</a> 
<ul id="value_variable_from_controller"><ul> 

<script> 
var getTheValue=function(){ 
     $.ajax({ 
     type:'GET', 
     url:'/run/results', 
     success:function(data,status){ 
     <!--how to dynamically UPDATE the value_variable_from_controller?--> 
     alert("Successfully"); 
     } 
     }); 
    } 
    $(document).on("click","#get_value",getTheValue); 
</script> 

這是我的控制器,其中i遍歷x的值,

results.rb

x=0 
5.times do 
x++ 
sleep(1) 
#HOW TO RETURN THE VALUE OF VAR X EVERY UPDATE? 
#render :json => x, :status => :ok #do i need to have a loop in js? 
end 

非常感謝。

回答

1

如果我正確地理解了您,您希望每次在服務器上更新HTML文檔時更新該值,那麼正確嗎?儘管客戶端和服務器之間的狀態轉換通常由客戶端啓動,但有多種方法可以實現此目的。

爲了解決這個問題,websockets是目前最流行的方法 - 基本上打開了客戶端和服務器之間的雙向通信管道。當然,對於簡單的例子來說,這可能是矯枉過正的(除非你需要在客戶端和服務器之間進行沉重的實時交互 - 那麼肯定值得引以爲傲) - 而像輪詢這樣的事情可能更合適(這實際上已經啓動由客戶端),雖然它會產生大量的請求。

您可能還會考慮long polling其中只有打開一個連接。

輪詢是一種技術,客戶端以一定的間隔呼叫服務器請求數據,這將適用於您的情況。從您發佈的代碼中,您似乎也希望可以通過單擊#get_value鏈接來獲取該值,該鏈接可以使用與長輪詢服務相同的方法。下面是一個例子:

// in your view/javascript 
$(document).ready(function() { 
    function getValue(trigger) { 
    $.ajax({ 
     type: 'GET', 
     url: '/run/results/', 
     success: function(data, status) { 
     $('#value_variable_from_controller').text(data.x); 
     if(trigger) { 
      setTimeout(getValue(true), 1000); } 
     } 
    )} // end AJAX 
    } // end getValue 

    // binding the action to your link as well 
    $('#get_value').on('click', function(event) { 
    event.preventDefault(); 
    getValue(false); 
    }); 
    // start the polling 
    getValue(true); 
}); 

# in your controller 
@x = 0 # initial value 
def results 
    @x++ # increment every time this action is called 
    render @x.to_json 
end 

通過這種方式,客戶端初始化的數據流,並且服務器響應於客戶端請求變異狀態 - 這是在客戶機/服務器體系結構的規範。

客戶端 - 服務器特性描述了應用程序中合作程序的關係。服務器組件向一個或多個客戶端提供功能或服務,這些客戶端啓動對這些服務的請求。 (http://en.wikipedia.org/wiki/Client%E2%80%93server_model

+0

不錯的答案,謝謝。它解決了我的問題,即時通訊仍然遇到一些錯誤,但即時通訊工作。謝謝@nocohvi。 – hey 2014-10-08 08:14:22

+1

隨時:-)如果您有任何問題,請不要猶豫,拍我的方式! – nicohvi 2014-10-08 09:03:31

+0

嗨nicohvi如果客戶端和服務器之間的狀態轉換是由服務器/方法在rails中啓動的,那麼該怎麼辦? – hey 2014-10-09 03:37:35