Rails:用js响应Ajax请求

jon*_*hue 5 javascript ajax ruby-on-rails respond-to ruby-on-rails-5

当使用 ajax 请求从 Rails 控制器操作获取响应时,我遇到了一些奇怪的行为。

$.ajax({
    type: 'GET',
    url: '/notifications',
    success: function(result) {
        eval(result);
    }
});
Run Code Online (Sandbox Code Playgroud)
$.ajax({
    type: 'GET',
    url: '/notifications',
    success: function(result) {
        eval(result);
    }
});
Run Code Online (Sandbox Code Playgroud)

因此,当使用带有railsremote: true选项的请求时,这个respond_to块工作得很好,但是使用ajax调用时,它只是将请求重定向到root_url.

当指定Ajax 请求时jsondataTypeso 很好地返回 JavaScript,但由于它无效json,因此eval()不会运行它。

有没有办法从 JavaScript 中启动 Rails 远程请求或指定返回的 JavaScript 可执行的数据类型?


即使在 ajax 调用中指定也dataType: 'text/javascript',无法解决问题。

Pav*_*van 5

因此,当使用带有 Rails'remote: true 选项的请求时,此 respond_to 块工作正常,但使用 ajax 调用时,它只是将请求重定向到 root_url

因此,到达控制器的请求格式HTML不是JS. 使用dataType: 'script'生成请求 asJS应该可以解决您的问题。

$.ajax({
  type: 'GET',
  dataType: 'script',
  url: '/notifications'
});
Run Code Online (Sandbox Code Playgroud)