Ruby on Rails:无法从form_tag调用ajax回调

时间:2016-09-12 10:05:17

标签: javascript ruby-on-rails ruby ajax

在我看来(/app/view/media/index.html.erb),我有一个ajax函数和一个form_tags: 我的AJAX功能:

<script type="text/javascript" charset="utf-8">
  $(document).ready(
      function () {
        $("#my_ajax").bind("ajax:success",
            function (evt, data, status, xhr) {
              console.log(data);
              }
            ).bind("ajax:error", function (evt, data, status, xhr) {
          console.log("doh!")
        });
      });
</script>
。 我的form_tags:
    <%= form_tag '/delete_media', method: :delete do %> <%= submit_tag 'Delete', class: 'btn btn-danger', disabled:@media_contents.empty? , :remote => true, :id => "my_ajax" %>

我们的目标:当我在提交后收到服务器的响应时,将运行my_ajax函数 怎么做 ???我无法触发“my_ajax”功能?我总是从服务器

获得JSON响应

修改

我的控制器:

def delete_media @medias=Media.where(id: params[:media_contents]).destroy_all render json: @medias end

2 个答案:

答案 0 :(得分:0)

也许尝试这样的事情:

<script>
  $(document).ready(function(){
    $("#my_ajax").on('ajax:success', function(e, data, status, xhr){
      console.log(data);
    }).on('ajax:error',function(e, xhr, status, error){
      console.log('doh!')
    });
  });
</script>

答案 1 :(得分:0)

你不应该像那样写js句柄ajax 在rails中实现ajax的正确方法是:

在/app/view/media/index.html.erb中:

form_tag ..., remote: true

在媒体控制器中:

def destroy
    # do your job
    respond_to do |format|
      format.js   {}
    end
end

在/app/view/media/destroy.js.erb:

// your js handle code

更多信息:http://guides.rubyonrails.org/working_with_javascript_in_rails.html