我应该在ajax jquery请求的URL部分中输入什么? URL不断返回未定义

时间:2019-04-05 05:35:46

标签: javascript jquery ruby-on-rails

我正在尝试呈现一个新的Event对象,并通过javascript在同一页面上呈现数据。我需要将结果显示在/ users / 1 / events / new(这是我的表格)上。我正在使用Ajax Jquery请求。但是网址不断返回未定义的内容。

以下是我尝试在该URL部分中添加的内容:

1)${this.href}.json 2)'this.action' 3) / users / $ {e.target.data} / events` =>此动态代码应返回整数。

我收到诸如非法调用和422(不可处理实体)之类的错误。我已经搜索过,但仍然感到困惑。 我希望我的问题结构合理。如果没有,请告诉我。

这是我的表格:

<div class="form" id="form-wrap-event" data=<%=current_user.id%>>

      <%= render 'form' %>

</div>

我的current_user.id返回当前用户的ID。

这是我的events.js

function getNewEvent() {
  $("#form-wrap-event").on("submit", (e) =>  {
    e.preventDefault()
    console.log("new event")
    $.ajax({
         method: "POST",
         url: (I DON'T KNOW WHAT TO PUT HERE)
        }).done(function(response){
          console.log('the data is: ', response)
    // console.log($(this).serialize())
    // const values = $(this).serialize()
    // $.post('/events', values)
    // .done(function)(data) {
    //
    // }
         })
   })
 }

这是我的事件控制器:

def create
      @event = Event.create(event_params)
      @event.host = current_user.host
      @users = User.all

      if !params[:event][:guest].blank?
          params[:event][:guest].each do |id|
            #finds guests and adds them to event's guest list
            @event.guests << Guest.find_or_create_by(user_id: id)
            @event.save
            @user.host.events << @event
          end
          respond_to do |format|
            format.html { redirect_to user_events_path }
            format.json { render json: @event }
          end
           # render json: @event
          # redirect_to user_events_path, flash: {success: "#{@event.name} is created!"}
      else
        render :new, flash: {danger: "Please enter all fields."}
      end
    end

1 个答案:

答案 0 :(得分:0)

所以我放弃了ajax jquery语法,而是改用post方法。

function getNewEvent(){
  $('form').submit(function(event) {
    //prevent form from submitting the default way
    event.preventDefault();
    let values = $(this).serialize();
      $.post(`${this.action}`, values).done(function(data) {
        console.log(data)
        $('#app-container').html('')
        const newEvent = new Event(data)
        const htmlToAdd = newEvent.renderHTML()

        $("#app-container").html(htmlToAdd)
    });
  });
}