javascript change ruby ​​переменная - PullRequest
0 голосов
/ 26 апреля 2011

Я новичок в веб-разработке, поэтому я надеюсь, что это имеет смысл. Я использую Ruby 1.8.7 и Sinatra. Я устанавливаю переменную в config.ru, например

$MyFile = "file.json"

Затем я вызываю файл erb, который использует эту переменную, чтобы открыть "file.json", получить некоторые данные и отобразить их. Все идет нормально.

Если пользователь активирует раскрывающийся список на странице, мой код JavaScript слушает и должен перезагрузить страницу, но с $MyFile = "file2.json", таким образом, отображаемые данные будут другими. Я могу обнаружить изменение и перезагрузить страницу, однако я не знаю, как изменить переменную.

Можно ли по сути назвать $MyFile = "file2.json" из JavaScript? Конечно, вызов функции Ruby тоже подойдет.

Опять же, я не очень опытен в этом деле. Я читал, что AJAX может понадобиться, но я ничего не знаю об AJAX.

Ответы [ 3 ]

2 голосов
/ 26 апреля 2011

Таким образом, вы не можете изменять переменные на стороне сервера, используя только JavaScript без каких-либо дополнительных запросов.Если вы хотите изменить переменную без обновления страницы, вам нужно будет отправить запрос с помощью Ajax на некоторый URL с параметрами, для которых будет указано новое значение.Вы уже знаете, как создать маршрут в sinatra и как явно изменять переменные, так что вам просто нужно изучить среду javascript, такую ​​как jQuery, и ее библиотеку ajax, чтобы помочь вам совершать вызовы.

Кстати, Ajax - это просто способ для вашего браузера общаться с сервером, отправлять запросы и получать данные, не обновляя страницу.Ajax-запрос в двух словах просто указывает на URL-адрес, как когда вы переходите на URL-адрес с помощью браузера (GET) или отправляете форму (POST), и возвращает ответ на этот URL-адрес, чтобы вы могли использовать javascript для изменения страницы.,

С учетом всего вышесказанного вам, вероятно, следует переосмыслить то, как вы поступаете с заявлением.Например, глобальная переменная, такая как $ MyFile, существует только один раз, поэтому один пользователь, изменяющий ее, изменит ее для всех пользователей, которые находятся на вашем сайте.

По сути, подумайте, какие виды взаимодействия абсолютно необходимы для взаимодействия вашего сервера.и вашему клиенту, какое состояние должно храниться и где вы можете его хранить, и посмотрите на столько примеров, сколько сможете найти, и попробуйте скопировать их и изменить подкладку на то, что вы хотите сделать.

Удачи!

0 голосов
/ 26 апреля 2011

Я не могу ясно понять ваш вопрос.Но я разместил пример кода, так как я принимаю требования из вашего вопроса.

Я предполагаю, что код javascript прослушивает функцию "when_change_drop_down ()"

<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>

Так что вы можететакже легко изменить значение текстового поля, когда раскрывающийся список изменился.
Надеюсь, это поможет вам.

0 голосов
/ 26 апреля 2011

Я не очень понимаю вопрос. Но config.ru - это конфигурация стойки вашего приложения. Это не самое подходящее место для бизнес-логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...