简体   繁体   English

使Rails response_to为Ajax请求格式化js

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

I'm trying to make an Ajax request that makes an update upon a radio button click without reloading an entire page. 我正在尝试发出一个Ajax请求,该请求在单选按钮单击时进行更新,而无需重新加载整个页面。

Update action definition in my controller. 更新控制器中的动作定义。 There really not that much info on this part in the Rails docs. 在Rails文档中,关于这部分的信息确实很少。

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

update.js.erb, not sure if this code even works, but I can't test it since Rails is not even finding it: 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)
        })
    })
})

App currently breaks down with ActionController::UnknownFormat in RsvpsController#update at the respond_to line. 目前应用打破了与ActionController::UnknownFormat in RsvpsController#updaterespond_to行。 This posting is an extension of this one, which is trying to solve too many problems at once . 这篇文章是此文章的扩展,它试图立即解决太多问题

log 日志

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'

UPDATE 更新

in my routes file, I did resources :rsvps, defaults: { format: 'js' } . 在我的路由文件中,我做了resources :rsvps, defaults: { format: 'js' } This got the app to process the request as JS, instead of HTML, but now it renders the update.js.erb file. 这使应用程序以JS(而不是HTML)而不是HTML的形式处理请求,但现在它呈现了update.js.erb文件。 DB gets updated, but no partial reload happens as desired. 数据库已更新,但是没有发生部分重新加载的情况。

try like this 这样尝试

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

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

Or 要么

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