如何在Ruby on Rails 3.0中对不同的域进行AJAX调用



我在www.example.com上运行的应用程序控制器中有一个动作email,我试图将email的表单数据发送到www.data.example.com/email,其中我的另一个应用程序收到请求,并且我能够以js格式保存数据。但我想发送回确认到www.example.com并使用rjs模板替换html。这里有一些代码供您参考:

email.html。erb 呼吁 www.example.com

   <div id="div_content">
    <%= form_for(@user, :url => "http://data.example.com/mail", :remote => true) do |f| %>
    <%= f.label :email %>
    <%= f.text_field :email%>
    <% end %>
   </div>

email申请动作:data.example.com/email -

def email
  @user = User.create(params[:user])
  respond_to do |format|
    if @user.save!
       format.html { redirect_to(user_page_path(@user.vip_id), :notice => 'Thank you! You are now on our priority list.') }
       format.js
    else
       format.html { render :text => "user can not be saved at this moment!"}
    end
  end
end

email.js。rjs调用www.data.example.com/email

page.replace_html :div_content, :partial => "show", :object => @user

我可以在我的日志中看到请求从一个域一直到子域,甚至动作被触发,但是,我不能得到响应回主域。有没有办法发送回调到主域。我只是想反映在div_contentdiv内的形式的变化,并希望用_show.html.erb的内容替换,这是我在我的子域。

许多谢谢,


苏利耶:)

发生这种情况是因为rails认为您试图对自己发起跨站点请求伪造攻击。默认情况下,rails有一个安全特性,拒绝来自外部源(即你的其他应用程序)的表单提交

最简单(但不是最安全)的方法是将此添加到您要发布数据的控制器的顶部:

protect_from_forgery :except => :email

再保险的评论

啊,我明白了,当我第一次读到你的帖子时,我没有很注意,抱歉。我错过了所有关于rjs的部分。

我当然不是rjs专家,但看起来你做的大部分事情都是对的。对我来说唯一可疑的部分是这一行:

page.replace_html :div_content, :partial => "show", :object => @user

我认为应该是:

page.insert_html(:bottom, "div_content", :partial => "show")

也可以尝试用

替换rjs模板
page.alert("debug");

只是为了确保它真的不会回来,因为我怀疑它是…

伙计们,这是我要做的工作-

嗯,我试图做跨域通信使用我的两个RoR应用程序,因为我在我的问题中提到了!

最后我找到了一种方法来实现相同的使用"EasyXDM"(www.easyxdm.net)它解决了这个问题。它在大多数浏览器上都运行良好,包括IE7和Firefox的旧版本。如果你想完成它,CORS是另一个解决方案,但它无法在IE7上工作…

哇!现在我可以依靠我不同的应用程序之间的跨域通信,而不使用iFrame。

相关内容

  • 没有找到相关文章

最新更新