Dojo request.post 到 Rails 失败
Dojo request.post to Rails Fails
我在 Rails 上将网站从 Symfony 转换为 Ruby,最后我的 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()" 并将其隐藏。后来我添加了代码来捕获任何错误。它会立即到达那里,而不是在两秒超时之后。顺便说一句,我在这里使用 dojo。所以我怀疑它不喜欢“/contact/create”,因为这是我唯一改变的东西。
在我的 routes.rb 我有:
get 'contact/create'
我的 post 中的信息是否正确?如果不是我怎么去那里? java脚本包含在 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
看看您在开发工具中的网络选项卡,它应该会告诉您失败的原因 post...我会说尝试将 handleAs: 'json'
选项添加到您的 request.post.有关 dojo/request 的更多信息,请阅读 this
事实证明,我在 request.post 语句中的路径是正确的。我发现我将 Javascript 复制到我的 html.erb 文件中,这样我就可以使用
<%= contact_create_path %>
在原地。我最终得到了相同的价值,所以这不是问题。然后我检查了我的 Firebug 控制台。 Rails 发送一个很好的问题转储。我遇到了 404 错误。问题是我正在做 post 并且没有路线。所以我将 routes.rb 文件从
更改为
get 'contact/create'
到
post 'contact/create'
如果我想做一个非Javascript版本,这可能会在以后给我带来其他问题。
然后我得到了另一个错误:
ActionController::InvalidAuthenticityToken in ContactController#create
在 Whosebug 的帮助下,我找到了解决方法。我在下面添加了第二行:
class ContactController < ApplicationController
skip_before_filter :verify_authenticity_token
...
同样,此解决方案可能会导致其他问题。跳过验证似乎不是一件好事。我在使整个过程正常工作时遇到了许多其他问题,但它们特定于我的应用程序。
我在 Rails 上将网站从 Symfony 转换为 Ruby,最后我的 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()" 并将其隐藏。后来我添加了代码来捕获任何错误。它会立即到达那里,而不是在两秒超时之后。顺便说一句,我在这里使用 dojo。所以我怀疑它不喜欢“/contact/create”,因为这是我唯一改变的东西。
在我的 routes.rb 我有:
get 'contact/create'
我的 post 中的信息是否正确?如果不是我怎么去那里? java脚本包含在 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
看看您在开发工具中的网络选项卡,它应该会告诉您失败的原因 post...我会说尝试将 handleAs: 'json'
选项添加到您的 request.post.有关 dojo/request 的更多信息,请阅读 this
事实证明,我在 request.post 语句中的路径是正确的。我发现我将 Javascript 复制到我的 html.erb 文件中,这样我就可以使用
<%= contact_create_path %>
在原地。我最终得到了相同的价值,所以这不是问题。然后我检查了我的 Firebug 控制台。 Rails 发送一个很好的问题转储。我遇到了 404 错误。问题是我正在做 post 并且没有路线。所以我将 routes.rb 文件从
更改为get 'contact/create'
到
post 'contact/create'
如果我想做一个非Javascript版本,这可能会在以后给我带来其他问题。
然后我得到了另一个错误:
ActionController::InvalidAuthenticityToken in ContactController#create
在 Whosebug 的帮助下,我找到了解决方法。我在下面添加了第二行:
class ContactController < ApplicationController
skip_before_filter :verify_authenticity_token
...
同样,此解决方案可能会导致其他问题。跳过验证似乎不是一件好事。我在使整个过程正常工作时遇到了许多其他问题,但它们特定于我的应用程序。