Я борюсь с / 1048 * AJAX запросами в Rails. Здесь есть официальное руководство , но у меня возникают небольшие трудности с его сопоставлением с 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}));
Это публикует / пользователи некоторую информацию о сеансе. Это проходит хорошо. Обратите внимание на 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 работает правильно . Console.log в JS выше корректно console.logs полученные JSON. На запрос отвечает 201 и переменная экземпляра @fingerprint_user в форме JSON.
Моя проблема с возвратом 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
- это div в моем index.html.erb
:
console.log("hello");
$("<%= escape_javascript(render @fingerprint_user) %>").appendTo("#fingerprint");
Еще раз, ответ: 200 и соответствующий html, но это не отображается на странице.