【问题标题】:jQuery $.ajax() call to get JSON from Rails 3 controller results in 304 Not Modified?jQuery $.ajax() 调用从 Rails 3 控制器获取 JSON 导致 304 Not Modified?
【发布时间】:2011-10-30 21:17:14
【问题描述】:

在 application.js 我有:

$("#combo_box").live('change', (function() {
    $.ajax( {
                    url: '/my_controller/get_data',
                    data: {id: some_id},
                    success:  function(data){ do_stuff_with_data(data) }
             }
           )
    } ) )

在 my_controller 代码中我有:

  def get_data
    id = params[:id]

    @data = MyModel.DoSomeStuff(id)

    respond_to do |format|
      format.js { render :json => @data}
    end
  end

但由于某种原因,success 中的函数仅运行一次(我认为),其余时间当组合框更改触发 ajax 调用时,Firebug 会报告304 Not Modified

它是如何工作的?谢谢!

【问题讨论】:

    标签: ruby-on-rails ajax ruby-on-rails-3 jquery


    【解决方案1】:

    $.ajax 的默认方法是 GET:

    类型字符串
    默认值:'GET'

    所以您的 $.ajax 调用正在执行 GET 请求,并且有人可能正在缓存它。尝试将cache: false 添加到您的$.ajax 选项中:

    缓存布尔值
    默认值:true,对于 dataType 'script' 和 'jsonp' 为 false
    如果设置为false,它将强制浏览器不缓存请求的页面。

    【讨论】:

    • 我没有意识到浏览器正在缓存 get,非常有趣,成功了!
    • 另外我想指出,jQuery 将结果作为字符串返回,直到我在 ajax 调用中专门设置了 dataType: 'json' ,这让我有一段时间感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2020-03-19
    • 1970-01-01
    相关资源
    最近更新 更多