Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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 通过一个操作组合所有Ajax消息_Javascript_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 通过一个操作组合所有Ajax消息

Javascript 通过一个操作组合所有Ajax消息,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我有一个有很多AJAX表单的网站,现在,我必须为每个表单创建一个新的js.erb视图,以便发布一条消息,该消息基本上说已完成,但每个操作都是唯一的 是否有一种方法可以将一个操作组合或转发到控制器中的消息操作,这样我就只需要一个视图来处理所有JavaScript消息 以下是我所拥有的: 控制器: def some_action { do some things here } respond_to do |format| format.js end end 视图

我有一个有很多AJAX表单的网站,现在,我必须为每个表单创建一个新的js.erb视图,以便发布一条消息,该消息基本上说已完成,但每个操作都是唯一的

是否有一种方法可以将一个操作组合或转发到控制器中的消息操作,这样我就只需要一个视图来处理所有JavaScript消息

以下是我所拥有的:

控制器:

def some_action
    { do some things here }
    respond_to do |format|
      format.js
    end
end
视图:

some_action.js.erb

$('#messages').append("<%= escape_javascript(render :partial => 'flash_message') %>");

<% if @error == "True" %>
$('#flash').removeClass().addClass( "error" ).html('<%= escape_javascript(@message) %>');
<% else %>
$('#flash').removeClass().addClass( "success" ).html('<%= escape_javascript(@message) %>');
<% end %>
$(“#消息”).append(“'flash#u消息”)%>”;
$('#flash').removeClass().addClass(“error”).html(“”);
$('#flash').removeClass().addClass(“success”).html(“”);

希望在控制器中有一个操作来控制所有消息,而不需要进行其他更改。

您可以将该功能抽象为实例方法,类似这样

def ajax_success(message)
  @message = message
  render 'ajax/success'
end

def ajax_failure(message)
  @message = message
  render 'ajax/failure'
end
然后在你的控制器里

def update
  if (successful)
    ajax_success
  else
    ajax_failure
  end
end
您可以在
应用程序控制器
中定义它们,也可以在您希望使用它们的任何控制器中包含的模块中定义它们

当您希望有响应多种内容类型的操作时,这里会出现一些问题,但是对于只响应
.js
的操作,这应该可以

另外,我认为像这样的AJAX响应的标准实践是返回一条JSON消息,然后使用一些javascript函数对其进行解码并适当地转换页面