对链接进行 ajax 调用单击以更新链接本身(Ruby on Rails)

Posted

技术标签:

【中文标题】对链接进行 ajax 调用单击以更新链接本身(Ruby on Rails)【英文标题】:Making an ajax call on a link click to update the link itself (Ruby on Rails) 【发布时间】:2021-09-21 23:38:43 【问题描述】:

我正在开发的应用程序有一个更新程序页面,单击链接将提示下载最新版本的 ios 应用程序。但是,当从 webclip 打开更新程序页面时,webclip 可能不是最新版本。我的解决方案是运行 ajax 查询来检索最新版本。

这里是查询:

$('.download-link').click(function(event) 
    $.ajax(
        url: "/updater",
        type: "GET",
        success: function(result)
        
    )
)

这是控制器中的方法:

def update
  @version = AppVersion.find_by(app_type: "AppType", is_active: true)
end

这里是 updater.html.erb 文件中的相关链接:

<a class="download-link" href="itms-services://?action=download-manifest&url=<%= @version.link_to_stable_build %>">

我对 ajax 不是很熟悉,也不完全确定从这里到哪里去实际确保调用该方法来更新 updater.html.erb 文件中的链接。

【问题讨论】:

【参考方案1】:

这里不需要视图。只需在 Location 标头中返回带有 URL 的标头响应:

def update
  version = AppVersion.find_by(app_type: "AppType", is_active: true)
  url = "itms-services://?action=download-manifest&url=" + version.link_to_stable_build
  render head: :ok, 
         location: url
end

然后只需更新 javascript 处理程序中的 DOM:

// delegation makes this compatible with turbolinks
$(document).on('click', '.download-link', function(event) 
  let link = $(this);  
  // shorthand for $.ajax ....
  $.get("/updater", function(data, textStatus, jqXHR) 
    let uri = jqXHR.getResponseHeader('Location');
    link.attr('href', uri);
    // or if you want to promt a download 
    // window.location = uri;
  );
);

【讨论】:

以上是关于对链接进行 ajax 调用单击以更新链接本身(Ruby on Rails)的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 在按钮提交上更改链接的类名

AJAX调用会阻止导航到其他页面,直到完成为止

无法以 PDF 格式显示列表[重复]

Ajax 调用未从 ActiveRecord 返回最新数据

对 php 脚本进行 href 链接调用并运行它

如何使用ajax在url中传递不同的链接值