Javascript Rails使用AJAX请求响应不同的格式
我试图理解Rails中的AJAX请求。我目前使用remote:true提交了一个表单。如果请求成功,我想用HTML重定向进行响应,如果请求失败,我想用Javascript运行错误消息。然而,无论结果如何,请求似乎都希望返回一个.htmlJavascript Rails使用AJAX请求响应不同的格式,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我试图理解Rails中的AJAX请求。我目前使用remote:true提交了一个表单。如果请求成功,我想用HTML重定向进行响应,如果请求失败,我想用Javascript运行错误消息。然而,无论结果如何,请求似乎都希望返回一个.html respond_to do |format| if conversation format.html { redirect_to(conversation_path(conversation)) } else format.js en
respond_to do |format|
if conversation
format.html { redirect_to(conversation_path(conversation)) }
else
format.js
end
end
这是在我在AJAX上保存对话调用后调用的。成功保存后,会正确地发回路径HTML,但不会在客户端上呈现。但在保存失败时,它需要.html并抛出一个错误。如何接受.js作为响应?我的目标是在通话不成功时弹出一个错误,并在通话成功时将_重定向到
编辑:我的表格用于:
<%= form_for :conversation, url: :conversations, remote: true, html: { class: "conversation-form" } do |f| %>
这里有一个建议的替代方案,可以替代您的最终目标-在控制器中,将
format.html
条目放到respond\u to
块中。另外,将conversation
设置为视图模板可以访问的实例变量:
class YourController < ActionController::Base
def your_action
# awesome code doing stuff with a conversation object goes here
@conversation = conversation
respond_to do |format|
format.js # your_action.js.erb
end
end
end
希望这有帮助 这里有一个建议替代您的最终目标-在控制器中,将
format.html
条目放到respond\u to
块中。另外,将conversation
设置为视图模板可以访问的实例变量:
class YourController < ActionController::Base
def your_action
# awesome code doing stuff with a conversation object goes here
@conversation = conversation
respond_to do |format|
format.js # your_action.js.erb
end
end
end
希望这有帮助 您正在使用
conversation
,我认为它应该是@conversation
,因为它将在视图中使用。您正在编写if conversation
,它应该是if conversation.save
,因为if conversation
将始终为true,因此它将始终以html进行回复。您正在使用conversation
,我认为它应该是@conversation
,因为它将在视图中使用。您正在编写if-conversation
,它应该是if-conversation.save
,因为if-conversation
将始终为true,因此它将始终以html进行回复。我不知道Ajax使用remote:true
工作需要TurboLink或jQuery。您能用支持文档更新您的答案吗?您显然是在暗示这两者都是Ajax工作所必需的。这会给你答案的读者一个错误的印象。好的方面,我只是想解决提问者的问题,而不是整个社区。我已经删除了关于检查jquery的建议,并将其细化为一个通用解决方案。当我尝试这段代码时,我收到了消息“ActionController::ConversationsController中的UnknownFormat#create”。我尝试将format::js添加到helper的表单_中,但它似乎没有做任何事情。它仍在等待HTML响应。编辑:已解决此问题。非常感谢。我不知道Ajax使用remote:true
工作需要TurboLink或jQuery。您能用支持文档更新您的答案吗?您显然是在暗示这两者都是Ajax工作所必需的。这会给你答案的读者一个错误的印象。好的方面,我只是想解决提问者的问题,而不是整个社区。我已经删除了关于检查jquery的建议,并将其细化为一个通用解决方案。当我尝试这段代码时,我收到了消息“ActionController::ConversationsController中的UnknownFormat#create”。我尝试将format::js添加到helper的表单_中,但它似乎没有做任何事情。它仍在等待HTML响应。编辑:已解决此问题。非常感谢。