В моем приложении rails есть много обратных вызовов javascript на стороне клиента после запросов ajax, но мне не удалось получить правильный поток через route> controller> erb-файлы для работы.Ajax-запрос не возвращает файл erb
Вот один из примеров, начиная с запроса AJAX:
$(initElement).on("click", function(){
event.preventDefault();
var url = "http://localhost:3000/login";
$.ajax({
url: url,
method: "GET",
dataType: "html"
}).done(function(){
console.log("*** ajax success T ***");
displayObject.toggleSelectionLabels("show");
}).fail(function(){
console.log("*** ajax fail T ***");
});
});
Маршрут в routes.rb действия
get "/login" => "sessions#login"
сессий контроллер входа:
def login
puts "******* login " + "*" * 21
end
вход в систему .html.erb файл Я ожидаю от сервера:
<% @page_title = "UserAuth | Login" %>
<div class="form-column login">
<h1>Log in</h1>
<div class="tag-edits photo-form">
<%= form_tag(:action => 'login_attempt') do %>
... edited out...
<% end %>
</div>
</div>
Запрос ajax запускает маршрут, возвращается как «успешный» и обратный вызов toggleSelectionLabels, но не отображается содержание erb. Предотвращает ли ajax нормальную обработку в рельсах?
Спасибо за помощь. Теперь я получаю контент erb, но он поставляется со всем файлом макета, окружающим его (а не только с erb-контентом, который, как я ожидал, сам заполнил <% yield %>). Другими словами, вся страница перезагружает и заполняет выход. Это предупреждение тоже: «Синхронный XMLHttpRequest в основном потоке устарел ...», как будто я отправляю 2 запроса. Есть предположения? – tomBeach
Чтобы удалить макет, вам просто нужно добавить 'render layout: false' в качестве последней строки в методе' login' вашего контроллера. Что касается предупреждения, посмотрите на этот другой SO [post] (http://stackoverflow.com/questions/24639335/javascript-console-log-causes-error-synchronous-xmlhttprequest-on-the-main-thr) , Не забудьте отметить ответ, как принято, как только почувствуете готовность. – nbermudezs