欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me

在调试一个ajax请求的时候发现put, delete方法不工作。chrome后台调试发现请求是发出去了的。 但是在后端没有任何日志,也没有任何断点断上,好像没有没有发生请求一样,但是chrome明明是发了请求的。陷入迷之困境出不来。

偶然发现get api每次会发两个请求,第一个是options, 第二个才是get。才想起我的ajax是有跨域的(port不一样), 每次跨域请求出去之前会先发一个options请求给服务器,看服务器是否支持跨域,是否支持对应的方法。

我用了gem rack-cors做跨域请求支持,解决方法就是修改config/application.rb, Rack::Cors部分修改如下:

    config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', headers: :any, methods: [:get, :post, :put, :delete, :patch, :options] # 重点在这里,把支持的methods都加上
      end
    end if Rails.env.development?

重启服务器,问题解决!