【问题标题】:Rails: Respond with js to Ajax requestRails:用 js 响应 Ajax 请求
【发布时间】:2018-01-21 07:45:33
【问题描述】:

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

$.ajax({
    type: 'GET',
    url: '/notifications',
    success: function(result) {
        eval(result);
    }
});
def index
    respond_to do |format|
        format.html { redirect_to root_url, alert: 'Page not accessible' }
        format.js
    end
end

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

json 指定为Ajax 请求的dataType 时。 so 返回 JavaScript 就好了,但因为它无效 jsoneval() 不会运行它。

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


即使在 ajax 调用中指定 dataType: 'text/javascript', 也不起作用。

【问题讨论】:

  • 试试dataType: 'script'
  • @jonhue 您是否尝试在您的索引操作中检查if request.xhr?
  • @pavan 感谢您的建议!等我回家试试看
  • @cnnr 不,我为什么要这样做? respond_to 应该注意这一点。

标签: javascript ruby-on-rails ajax ruby-on-rails-5 respond-to


【解决方案1】:

所以这个 respond_to 块在使用带有 rails 的请求时可以正常工作 remote: true 选项,但使用 ajax 调用它只是重定向 对 root_url 的请求

所以控制器的请求格式是HTML 而不是JS。使用dataType: 'script' 会生成JS 的请求,应该可以解决您的问题。

$.ajax({
  type: 'GET',
  dataType: 'script',
  url: '/notifications'
});

【讨论】:

  • Hmm .. 似乎可行 - ajax 请求返回请求的 javascript。但同时成功回调并没有执行。
  • @jonhue 你有什么成功回调?
  • 我已将其添加到原帖中。
  • @johnue 你可以尝试响应而不是结果吗?
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多