2015-10-18 2 views
0

В моем приложении 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 нормальную обработку в рельсах?

ответ

0

Что вы подразумеваете под нормальной обработкой? Если вы хотите отобразить возвращаемый HTML вы можете захотеть сделать что-то вроде

$(initElement).on("click", function(){ 
    event.preventDefault(); 
    var url = "http://localhost:3000/login"; 

    $.ajax({ 
     url: url, 
     method: "GET", 
     dataType: "html" 
    }).success(function(response) { 
     // response is your html, use it to inject it into the html 
     // for Example 
     $('.main-div').html(response); 
    }).done(function(){ 
     console.log("*** ajax success T ***"); 
     displayObject.toggleSelectionLabels("show"); 
    }).fail(function(){ 
     console.log("*** ajax fail T ***"); 
    }); 
}); 

Обратите внимание на success обратного вызова. Он вызывается, когда ответ сервера имеет httpStatus = 200 (OK)

+0

Спасибо за помощь. Теперь я получаю контент erb, но он поставляется со всем файлом макета, окружающим его (а не только с erb-контентом, который, как я ожидал, сам заполнил <% yield %>). Другими словами, вся страница перезагружает и заполняет выход. Это предупреждение тоже: «Синхронный XMLHttpRequest в основном потоке устарел ...», как будто я отправляю 2 запроса. Есть предположения? – tomBeach

+0

Чтобы удалить макет, вам просто нужно добавить 'render layout: false' в качестве последней строки в методе' login' вашего контроллера. Что касается предупреждения, посмотрите на этот другой SO [post] (http://stackoverflow.com/questions/24639335/javascript-console-log-causes-error-synchronous-xmlhttprequest-on-the-main-thr) , Не забудьте отметить ответ, как принято, как только почувствуете готовность. – nbermudezs

Смежные вопросы