Javascript 如何使用AJAX监视ruby控制器传递到查看html的实例变量
嗨,我想创建一个页面,在该页面中,随着变量迭代的进行,它会动态地监视(查看)或呈现控制器中变量的值 view.html.erbJavascript 如何使用AJAX监视ruby控制器传递到查看html的实例变量,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,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',
<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>
非常感谢。如果我理解正确,您希望每次在服务器上更新HTML文档时都更新其值,对吗?虽然客户端和服务器之间的状态转换通常是由客户端启动的,但是有一些方法可以实现这一点。一, 为了解决这个问题,目前最流行的方法是开放客户端和服务器之间的双向通信管道。当然,对于您的简单示例来说,这可能有些过分(除非您需要客户机和服务器之间的大量实时交互——那么这当然值得一试)——而轮询之类的方式可能更合适(这确实是由客户机发起的),尽管它会生成大量请求
您也可以考虑只打开一个连接。
轮询是一种技术,在这种技术中,客户机以特定的时间间隔调用服务器请求数据,这对您的情况很有用。从您发布的代码来看,您似乎也希望可以通过单击#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
这样,客户机初始化数据流,服务器根据客户机请求改变状态,这是客户机/服务器体系结构中的标准
1客户机-服务器特性描述应用程序中协作程序的关系。服务器组件向一个或多个客户机提供功能或服务,这些客户机启动对此类服务的请求。()回答得好,谢谢。它解决了我的问题,我仍然遇到一些错误,但我正在努力。谢谢@nocohvi.Anytime:-)如果您有任何问题,请不要犹豫,直接向我提问!Hi nicohvi如果客户端和服务器之间的状态转换是由rails中的服务器/方法启动的,那么您必须使用WebSocket或服务器发送的事件。这在rails应用程序中并不常见(而且相当复杂,因为它涉及到使用另一台服务器作为websocket服务器,以及使用密钥/数据存储来存储连接的套接字),但是如果您想这样做,请查看以下内容::-)
// 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