【发布时间】:2020-05-02 16:28:42
【问题描述】:
我在 Rails 中遇到 JS AJAX 请求。有一个官方指南here,但我在将它与 ES6 JS 匹配时遇到了一些困难。在提出请求后,我无法将东西传回我的前端。
我有一个 JS window.onload 调用,因为我试图找到用户的屏幕尺寸(除其他外)并将其传递回 Rails:
let xhttp = new XMLHttpRequest();
const url = "/users";
xhttp.open("POST", url);
// Some other things added to it...
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 201) {
console.log(this.responseText);
}
};
xhttp.send(JSON.stringify({user_info: userInfo}));
它正在向 /users 发布有关会话的一些信息。这一切都很好。请注意跟踪响应的console.log,我们稍后再讨论。
在我的 Rails 控制器中:
def create
user_info = params[:user_info].permit!
user_info = user_info.to_s
@fingerprint_user = User.find_or_create_by(fingerprint: user_info)
respond_to do |format|
# NOTE: I have tried a few things here
# format.html { redirect_to @fingerprint_user, notice: "Successfully identified user by fingerprint." }
# format.js
format.json { render json: @fingerprint_user, status: :created, head: :ok }
end
end
JSON 发送器工作正常。上面JS中的console.log正确console.logs接收到的JSON。请求以 201 和 JSON 格式的 @fingerprint_user 实例变量响应。
我的问题是返回带有实例变量的 ERB JS。如指南所示,我尝试添加format.js。然后,请求返回一个200,以及我的views/users/create.js.erb文件的内容:
console.log("hello");
但是,它实际上并不是登录到控制台。
最后,我尝试了所有格式字段(js、html 和 json)。这是我的show.html.erb:
<p>Got user: <%= @fingerprint_user.to_s %> </p>
这是一个更好的views/users/create.js.erb 文件,其中fingerprint 是我的index.html.erb 中的一个div:
console.log("hello");
$("<%= escape_javascript(render @fingerprint_user) %>").appendTo("#fingerprint");
再一次,响应是 200,并且是相应的 html,但它没有呈现在页面上。
【问题讨论】:
标签: ruby-on-rails ajax xmlhttprequest erb ruby-on-rails-6