【问题标题】:RAILS not rendering js.erbRAILS 不渲染 js.erb
【发布时间】:2017-08-05 15:09:07
【问题描述】:

这是工作流程:

以 root_page.js 开头

document.addEventListener('DOMContentLoaded', function() {
var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function (data) {
    // code
};
httpRequest.open('GET', '/contents/ajax_rss.js', true);
httpRequest.send();
})

这会发送成功路由到 contents#ajax_rss 的 ajax 请求

def ajax_rss
  respond_to do |format|
    format.js {
    }
  end
end

并且应该呈现以下 ajax_rss.js.erb

document.getElementById("rss").innerHTML = "HELLO WORLD!";

这是服务器响应:

Processing by ContentsController#ajax_rss as JS
User Load (0.9ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? 
ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]
Rendering contents/ajax_rss.js.erb
Rendered contents/ajax_rss.js.erb (1.1ms)
Completed 200 OK in 9ms (Views: 5.0ms | ActiveRecord: 0.9ms)

但是文本没有相应地显示。我错过了什么?这是我第一次尝试 AJAX,而不是使用 remote: true 从表单或按钮调用。

所有远程:真正的调用都按预期工作。

【问题讨论】:

  • 您是否在浏览器控制台document.getElementById("rss").innerHTML = "HELLO WORLD!"; 中尝试过此操作并确认它正常工作?
  • 我确实做到了....

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


【解决方案1】:

remote: true选项可以让客户端执行服务端返回的js。这是你需要修复的部分。

您可以将回复传递给eval(response)。 参考:Calling a JavaScript function returned from an Ajax response

【讨论】:

    【解决方案2】:

    你可以使用 eval 来做到这一点:

      request = new XMLHttpRequest();
      request.onreadystatechange = function()
      {
          if (request.readyState == 4 && request.status == 200)
          {
              eval(request.responseText);
          }
      };
      request.open('GET', '/contents/ajax_rss.js');
      request.send();
    

    【讨论】:

    • 干杯维杰。感谢您的帮助!
    猜你喜欢
    • 2021-03-21
    • 2016-12-30
    • 2013-07-06
    • 1970-01-01
    • 2023-03-11
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多