繁体   English   中英

使Rails response_to为Ajax请求格式化js

[英]making rails respond_to format js for an Ajax request

我正在尝试发出一个Ajax请求,该请求在单选按钮单击时进行更新,而无需重新加载整个页面。

更新控制器中的动作定义。 在Rails文档中,关于这部分的信息确实很少。

 def update
    if @rsvp.update(rsvp_params)
      respond_to do |format|
        format.js
      end
    end
  end

update.js.erb,不确定该代码是否还能工作,但是由于Rails甚至找不到它,所以我无法对其进行测试:

$(document).on('ready', function() {
    $('.rsvp').on('click', function(e) {
        e.preventDefault()

        var user_id = $(.rsvp).data('user-id')
        var rsvp_id = $(.rsvp_id).data('rsvp-id')

        $.ajax({
            type: 'POST',
            url: "users/" + user_id + "/rsvps/" + rsvp_id
        }).done(function(response){ console.log('hello?', response)
        })
    })
})

目前应用打破了与ActionController::UnknownFormat in RsvpsController#updaterespond_to行。 这篇文章是此文章的扩展,它试图立即解决太多问题

日志

Processing by RsvpsController#update as HTML
  Parameters: {"utf8"=>"✓", "rsvp"=>{"event_id"=>"16", "status"=>"attending"}, "user_id"=>"1", "id"=>"11"}
  Rsvp Load (3.3ms)  SELECT  "rsvps".* FROM "rsvps" WHERE "rsvps"."id" = $1 LIMIT $2  [["id", 11], ["LIMIT", 1]]
   (0.2ms)  BEGIN
  Event Load (2.5ms)  SELECT  "events".* FROM "events" WHERE "events"."id" = $1 LIMIT $2  [["id", 16], ["LIMIT", 1]]
  User Load (1.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  SQL (0.7ms)  UPDATE "rsvps" SET "status" = $1 WHERE "rsvps"."id" = $2  [["status", 2], ["id", 11]]
   (2.4ms)  COMMIT
Completed 406 Not Acceptable in 82ms (ActiveRecord: 20.6ms)



ActionController::UnknownFormat (ActionController::UnknownFormat):

app/controllers/rsvps_controller.rb:19:in `update'

更新

在我的路由文件中,我做了resources :rsvps, defaults: { format: 'js' } 这使应用程序以JS(而不是HTML)而不是HTML的形式处理请求,但现在它呈现了update.js.erb文件。 数据库已更新,但是没有发生部分重新加载的情况。

这样尝试

$.ajax({
        type: 'POST',
        url: "users/" + user_id + "/rsvps/" + rsvp_id,
        contentType: "text/javascript"

    }).done(function(response){ 
       console.log('hello?', response)
    })

要么

 $.ajax({
        type: 'POST',
        url: "users/" + user_id + "/rsvps/" + rsvp_id.js
    }).done(function(response){ 
       console.log('hello?', response)
    })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM