iteye_3589
iteye_3589
2009-10-16 15:45
浏览 190
已采纳

Rails关于判断request请求类型的一个bug


def ajax_test
if request.xhr?
render :update do |page|
page.alert("xhr");
end
elsif request.post?
render :update do |page|
page.alert("post");
end
end
end

页面上是表单发送一个ajax请求:
<% form_remote_tag :url => {:action => "ajax_test", :id => @user }, :before => "$('submit_btn').disable();$('loading').show()"  do %>
<% end %>

测试结果是弹出xhr,很正确!不过....

def ajax_test
if request.post?
render :update do |page|
page.alert("post");
end
elsif request.xhr?
render :update do |page|
page.alert("xhr");
end
end
end

测试的结果是post。

bug吧。。

我的rails版本是rails 2.0.2 (都有点不好意思拿出来了... )

你们看一下新版本会有这个bug吗?
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • raecoo
    raecoo 2009-10-16 15:45
    已采纳

    佩服你直接质疑是Rails BUG的勇气, 但不得不告诉你, 这是你的问题.

    [code="java"]
    # Generates:
    #


    form_remote_tag :html => { :action =>
    url_for(:controller => "some", :action => "place") }
    [/code]
    点赞 评论
  • vwangzhen
    vwangzhen 2009-10-16 15:45

    [code="java"]
    <%= link_to_remote "post", {:url => { :action => "ajax_test"} ,:method=>:get } %>
    <%= link_to_remote "get", {:url => { :action => "ajax_test" } ,:method=>:post } %>
    [/code]

    [code="java"]
    def ajax_test
    if request.xhr?
    render :update do |page|
    if request.post?
    page.alert("post");
    end
    if request.post?
    page.alert("get");
    end
    end
    end
    end

    [/code]

    点赞 评论
  • JimJin
    JimJin 2009-10-16 16:54

    你的概念有些混淆, post get 跟 xhr 并不是一个概念
    post get 是请求方式, 在Rails 里面 还有 delete put

    get: 用于得到数据
    post: 用于添加数据
    delete: 用于删除数据
    put: 用于更新数据
    这些是一中约定 当然你也可以用 get 来 添加 删除 更新

    而 Ajax 是一中局部刷新技术

    Ajax 请求同一般的请求一样有 post get delete put
    并不是像你所想的 是xhr 就不是 post get delete put 了

    点赞 评论
  • franksinger
    franksinger 2009-10-19 20:59

    你这里的请求是xhr也是post的.

    点赞 评论

相关推荐