Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
Ajax Rails:使用remote true将_链接到,并在新选项卡或窗口中打开它_Ajax_Ruby On Rails 4 - Fatal编程技术网

Ajax Rails:使用remote true将_链接到,并在新选项卡或窗口中打开它

Ajax Rails:使用remote true将_链接到,并在新选项卡或窗口中打开它,ajax,ruby-on-rails-4,Ajax,Ruby On Rails 4,我有一个链接,当点击它时,它将发出一个AJAX调用。此AJAX调用将导致出现一个模式 = link_to edit_evaluation_path(evaluation), remote: true 但是,当尝试从链接打开一个新选项卡时(例如,用鼠标中键单击),我得到了一个ActionController::UnknownFormat:ActionController::UnknownFormat错误,因为该操作不希望以html格式响应。以下是相应操作的响应\u代码: respond_to d

我有一个链接,当点击它时,它将发出一个AJAX调用。此AJAX调用将导致出现一个模式

= link_to edit_evaluation_path(evaluation), remote: true
但是,当尝试从链接打开一个新选项卡时(例如,用鼠标中键单击),我得到了一个
ActionController::UnknownFormat:ActionController::UnknownFormat
错误,因为该操作不希望以html格式响应。以下是相应操作的
响应\u
代码:

respond_to do |format|
  format.js
end

如何防止用户在其他选项卡或窗口中打开链接?我是否必须将
链接更改为
,将
按钮更改为
?谢谢

我已经设计了一个解决方法。这包括两个步骤:

可以覆盖用于确定远程链接的目标url的jquery ujs函数。因此,在检查href之前,我们覆盖它以拾取数据属性

$.rails.href = function(el) {
    var $el = $(el);
    return $el.attr('data-url') || $el.attr('data-href') || $el.attr('href');
}
接下来,我们创建一个类似于link to的自定义帮助程序,它在data属性中输出url,而不是href

  def pseudo_link_to(name = nil, options = nil, html_options = nil, &block)
    html_options, options, name = options, name, block if block_given?
    options ||= {}

    html_options = convert_options_to_data_attributes(options, html_options)

    url = url_for(options)
    html_options["data-href".freeze] ||= url
    html_options['href'] = 'javascript:void(0)'
    content_tag("a".freeze, name || url, html_options, &block)
  end
请注意,实际href是
javascript:void(0)
,这是一个


现在,您所要做的就是在rails视图中使用
pseudo\u link\u to
helper,而不是
link\u to

我为今天运行的这个问题创建了Javascript唯一的解决方案

$。每个($([data remote='true']),函数(i,val){
$(val).data(“url”,“$(val).attr(“href”)).attr(“href”,“javascript:void(0);”)
});
$.rails.href=函数(el){
变量$el=$(el);
返回$el.data('url')| |$el.data('href')| |$el.attr('href');

}
当页面上有多个操作时,此操作不起作用。第二次单击它时,它抛出
getjavascript:void(0);net::ERR_失败了
很抱歉上面的评论。问题是,来自远程操作的响应也包含了这个脚本。因此,可以对其进行改进,以识别已更新的
url
字段并跳过它们。