Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails使用AJAX请求响应不同的格式_Javascript_Ruby On Rails_Ajax - Fatal编程技术网

Javascript Rails使用AJAX请求响应不同的格式

Javascript 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

我试图理解Rails中的AJAX请求。我目前使用remote:true提交了一个表单。如果请求成功,我想用HTML重定向进行响应,如果请求失败,我想用Javascript运行错误消息。然而,无论结果如何,请求似乎都希望返回一个.html

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响应。编辑:已解决此问题。非常感谢。