Как отправить post-запрос в действие rails

#javascript #ruby-on-rails #ajax

#javascript #ruby-on-rails #ajax

Вопрос:

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

@url всегда возвращает nil .

ПРИМЕЧАНИЕ: я пытаюсь создать пользовательское действие, но безуспешно, потому что для этого требуется шаблон.

Заранее спасибо 🙂

Действие индекса

 def index
    @url = params[:option]
  end
 

Представление индекса

 <input type="text" id="exampleFormControlInput1">

<p id="resp-result"><%= @url %></p>


<script type="text/javascript">
        $(".button").click(function(event){
             var userinput = document.getElementById("form").value;
             console.log(userinput);
            event.preventDefault();
            $.ajax({
                url:"/responses/",
                type: "POST",
                data: {option: userinput},
                dataType: "text",
                success:function(result){
                  alert("success"   result);

                },
                error:function(result){
                   alert("error"   result);
                }
            });
        });
</script>
 

Комментарии:

1. Поскольку вы делаете ajax-запрос, вам нужно ответить с помощью json. Установка значения в @url значение просто сделает его доступным для вашего представления, что не похоже на то, что вы хотите.

2. @vich — 100% согласен с тем, что простого указания @url значения, вероятно, недостаточно. Однако я не думаю, что на 100% точно сказать: «Поскольку вы делаете запрос ajax, вам нужно ответить с помощью json». Я все время выполняю ajax-запросы, которые получают html в качестве ответа. Возможно, я неправильно понял.

3. @jvillian вы правы, я просто сделал обобщение, основанное на этом вопросе. Вам, конечно, не нужно отвечать с помощью json, но, судя по сути вопроса, это то, что, вероятно, ищет OP.

4. @vich @jvillian Спасибо за ответ. извините, я вас не понимаю. но я пытаюсь изменить действие индекса на « @url = params[:option].to_json « но все равно я получаю null в представлении индекса

5. Я бы рекомендовал ознакомиться с документацией Rails по ajax . Короче говоря, вы хотите что-то вроде render json: params[:option] . Об этой теме можно узнать совсем немного, но я оставлю это на этом.

Ответ №1:

Юна, вам нужно будет вывести ответ в формате json. давайте предположим, что ваш ajax-скрипт может правильно отправлять данные в серверную часть ruby on rails.

Попробуйте это

в ajax этого нет

   url:"/responses/",
 

но

   url:"/responses.json",
 

затем вы можете получить результат согласно

 alert("success"   result.myurl);
 

вы можете использовать myurl как часть ответа json

Наконец, попробуйте это

 def index
    respond_to do |format|
        #@url = params[:option]
        @url='nancy more url'
        format.json do
          render json: {myurl: @url}.to_json
        end
    end
end