Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript更改ruby变量_Javascript_Ruby_Variables - Fatal编程技术网

javascript更改ruby变量

javascript更改ruby变量,javascript,ruby,variables,Javascript,Ruby,Variables,我是网络开发新手,所以我希望这是有意义的。我正在使用Ruby 1.8.7和Sinatra。我在config.ru中设置了一个变量,如 $MyFile = "file.json" 然后我调用一个erb文件,它使用该变量打开“file.json”,获取一些数据并显示它。到目前为止还不错 如果用户激活页面上的下拉列表,我的javascript代码将侦听并重新加载页面,但使用$MyFile=“file2.json”,因此显示的数据将不同。我可以检测到更改并重新加载页面,但是我不知道如何更改变量 是否可

我是网络开发新手,所以我希望这是有意义的。我正在使用Ruby 1.8.7和Sinatra。我在config.ru中设置了一个变量,如

$MyFile = "file.json"
然后我调用一个erb文件,它使用该变量打开
“file.json”
,获取一些数据并显示它。到目前为止还不错

如果用户激活页面上的下拉列表,我的javascript代码将侦听并重新加载页面,但使用
$MyFile=“file2.json”
,因此显示的数据将不同。我可以检测到更改并重新加载页面,但是我不知道如何更改变量

是否可以从javascript中调用
$MyFile=“file2.json”
?当然,调用Ruby函数也可以


再说一次,我对这件事不是很有经验。我读到可能需要AJAX,但我对AJAX一无所知。

我不太理解这个问题。但是config.ru是应用程序的机架配置。这不是业务逻辑的好地方。

因此,在没有任何额外请求的情况下,不能仅使用javascript更改服务器端变量。如果希望在不刷新页面的情况下更改变量,则必须使用Ajax向某个url发送一个请求,其中包含新值的参数。您已经知道如何在sinatra中创建路由,以及如何更改变量,因此您只需要查看一个javascript框架,如jQuery及其ajax库,以帮助您进行调用

顺便说一句,Ajax基本上只是一种浏览器与服务器对话、发出请求和获取数据的方式,而无需刷新页面。简言之,ajax请求只指向url,就像使用浏览器(GET)访问url或提交表单(POST)一样,并返回该url的响应,以便使用javascript更改页面

尽管如此,您可能应该重新考虑您的应用程序。例如,像$MyFile这样的全局变量只存在一次,因此一个用户更改它将为您网站上的所有用户更改它

本质上,思考服务器和客户机之间绝对需要发生什么样的交互,必须存储什么状态以及可以将其存储在何处,并查看尽可能多的示例,尝试复制它们并将它们更改为您想要做的事情


祝你好运

我不能清楚地理解你的问题。但是,我发布了示例代码,因为我根据您的问题假设了需求

我假设javascript代码监听函数“when\u change\u drop\u down()”

这是您的FILE.JSON内容位置
更改下拉菜单时的函数(){
var pars=“filename=“+document.getElementByID('myfile');
新的Ajax.Updater(“,”/controller/action?”+pars{
是的,
evalscript:对,
onComplete:函数(请求){
document.getElementById('content').innerHTML=request.responseText;
},
加载:函数(请求){
//你的装货程序
}
});
}      
因此,当下拉列表更改时,您也可以轻松更改文本框值。
我希望这对你有帮助

<div id="content"> THIS IS YOUR FILE.JSON CONTENT LOCATION </div>
<% $MyFile = "file.json" %>
<%= text_field_tag "myfile", "#{$MyFile}" %>

<script language="javascript">
function when_change_drop_down() {
    var pars = "filename=" + document.getElementByID('myfile');
    new Ajax.Updater("","/controller/action?"+pars, {
            asynchronous:true,
            evalScripts:true,
            onComplete:function(request){             
                document.getElementById('content').innerHTML = request.responseText;
            },
            onLoading:function(request){
                // Your loading porcesss
            }

        });
}      
</script>