【问题标题】:Dojo request.post to Rails FailsDojo request.post 到 Rails 失败
【发布时间】:2015-01-27 18:57:44
【问题描述】:

我正在将一个网站从 Symfony 转换为 Ruby on Rails,最后我将使用我的 javascript 弹出式电子邮件联系表。我不想重写表单或 java 脚本,因为它首先需要做很多工作才能让它工作。那将是第二阶段。

这就是我遇到问题的地方:

    sendBtn = new Button({
    label: "Send",
    onClick: function(){
        if (emForm.validate() == true){
            // Post the data to the server
            request.post("/contact/create",
                {data: domForm.toObject("contact-form"),
                // Wait 2 seconds for a response
                timeout: 2000

            }).then(function(response){
            emailDialog.hide();
            alertDialog.set("content",response)
            alertDialog.show();
            });
        }
    }
},"submit-btn");

我知道它会到达 request.post,因为我在它之前复制了“email.Dialog.hide()”行并将它隐藏起来。我后来添加了代码来捕获任何错误。它会立即到达那里,而不是在两秒超时之后。顺便说一句,我在这里使用道场。所以我怀疑它不喜欢“/contact/create”,因为它是我唯一改变的东西。

在我的 routes.rb 我有:

  get 'contact/create'

我的帖子中是否包含正确的信息?如果不是我如何到达那里? javascript 包含在 application.html.erb 中,因此可以从站点上的所有页面调用它。

如果相关的话,我的contact_controller.rb目前就是这样:

class ContactController < ApplicationController
  def create
    respond_to do |format|
      #format.html {}
      #format.js   {}
      format.json { render :json => {:response => 'Amazing, it works'} }
    end
  end
  def show
  end
end

【问题讨论】:

    标签: javascript ruby-on-rails ajax json dojo


    【解决方案1】:

    在开发工具中查看您的网络选项卡,它应该会告诉您发布失败的原因...我会说尝试在您的 request.post 中添加 handleAs: 'json' 选项。有关 dojo/request 的更多信息,请阅读 this

    【讨论】:

    • 谢谢。我改用 Firebug 日志。帖子以 json 格式发送。
    【解决方案2】:

    事实证明,我在 request.post 语句中找到了正确的路径。我发现我将 Javascript 复制到我的 html.erb 文件中,所以我可以使用

    <%= contact_create_path %>
    

    在它的位置。我最终得到了相同的值,所以这不是问题。然后我检查了我的 Firebug 控制台。 Rails 发送了一个很好的问题转储。我收到 404 错误。问题是我正在发帖,但没有路线。所以我从

    更改了 routes.rb 文件
    get 'contact/create'
    

    post 'contact/create'
    

    如果我以后想做一个非 Javascript 版本,这可能会给我带来其他问题。

    然后我又遇到了一个错误:

    ActionController::InvalidAuthenticityToken in ContactController#create
    

    通过 Stackoverflow 的帮助,我找到了解决方法。我在下面添加了第二行:

    class ContactController < ApplicationController
      skip_before_filter :verify_authenticity_token
    ...
    

    同样,此解决方案可能会导致其他问题。跳过验证似乎不是一件好事。在使整个过程正常工作时,我遇到了许多其他问题,但它们是针对我的应用程序的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      相关资源
      最近更新 更多